Table/Collection View PrefetchDataSource

Hüseyin Bagana
Jul 31, 2017 · 2 min read
Source

Merhabalar bugün UITableView ve CollectionView ailesinde bulunan protocollerden bahsedeceğim.

- UITableViewDataSourcePrefetching

- UICollectionViewDataSourcePrefetching

PrefetchDataSource iOS 10.0 ile karşımıza çıktı ve iyiki de çıktı.

Öncelikle prefetchDataSource yokken nasıldı onu inceleyelim.

iOS 10 öncesinde bir UITableView ‘in lifecyle’ı tam da yukarıdaki gibidir.

  • tableView(_:cellForRowAt:) -> Ekranda gözükeceği anda cell’imizi customize edip return ettiğimiz method.
  • tableView(_:willDisplay:forRowAt:) -> IndexPath row u ekranın en altındaki cell’in 1 altındaki row olarak değer alan methodumuz. Hali hazırda ekranda hiçbir şekilde gözükmez.
  • tableView(_:didEndDisplaying:forRowAt:) -> willDisplay methodumuzun tam tersine IndexPath row u ekranın en üstündeki cell’in 1 üstündeki row olarak değer alan methodumuz. Hali hazırda ekranda hiçbir şekilde gözükmez.

Yukarıdaki örnekte default UITableViewCell kullandım ve burada tabiki herhangi bir prefetch’e ihtiyaç duyulmuyor. Ancak aynı mantıkta çoğu zaman collectionView veya tableView içinde resim vb. multimedyaları koyduğumuzda bu controllerde smooth scroll sağlanmıyor. Bu durumlarda async çağrılarla resimlerimizi fetch edip ilgili control üzerine yerleştiriyoruz. İşte tamda bunun bize prefetchRowAt yardımcı oluyor.

UITableView için prefetchRowAt methodu IndexPath row u ekranın en altındaki cell’in 10 altındaki rowun tamamını değer alan methodumuz. Bu kısımda kullanıcımız scroll ile aşağıya daha inmeden ilgili rowların datalarını fetch edersek cell gözüktükten sonra fetch süresini beklememiş olacak. Aynı şekilde methodumuz yukarıya doğru scroll edilincede 10 üstündeki row’un indexPath’ini parametre olarak alır.

tableView.prefetchDataSource = self

TableView’in prefetchDataSource’unu set ettikten sonra :

prefetchRowsAt methoduyla fetch işlemine başlanır cancelPrefetching ile ise o anki scroll yönünden vazgeçip aksi yönde scroll yapılması durumunda eğer herhangi bir task varsa , o taskı iptal etmek için kullanılan bir methoddur. Örneğin Prefetch’i OperationQueue ile taskları yöneterek yapabilirsiniz.

Görüldüğü gibi ters scroll ile başlanan prefetchler arasında, cancel methoduna düşenler oldu. Table View için bahsettiklerim Collection View içinde geçerlidir.

Bir Sonraki Yazıda Görüşmek Üzere ✋

Swift Türkiye

Swift Programlama Hakkında Türkçe Paylaşımlar

Hüseyin Bagana

Written by

 iOS Developer

Swift Türkiye

Swift Programlama Hakkında Türkçe Paylaşımlar

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade