As Regexident said, NSCollectionView is Apple's way of doing what you mention.
Also check out the JUCollectionView :

JUCollectionView aims to reduce the delayed NSCollectionView. Instead of loading every possible cell at once, JUCollectionView only displays visible cells. To further improve performance, JUCollectionView also, if possible, reuses cells. This means that he must load a batch of cells to cover the view, and then reuse them all his life.
source share