TL; DR
- は、文字通り、関数名に
visible
してください。
- のUITableViewは、それがiOSの9でやったように振る舞う
- あなたは10
のiOS上UICollectionViewで異なる可視セル対ロード扱いたい場合は、いくつかの簿記を行う必要がありますUITableViewとUICollectionViewは、それがプリフェッチに来るとき非常に異なる動作をするように見えます。注目すべき
最初のものはプリフェッチ細胞とプリフェッチデータの差があることである:
- プリフェッチ細胞は、細胞が実際に画面上に表示される前に呼び出される
cellForRowAtIndexPath
を指します。これにより、オフスクリーンであるがまだロードされているセルがあるシナリオが可能になります。
- プリフェッチデータは、画面に表示される
indexPaths
について通知するprefetchDataSource
メソッドを参照しています。このメソッドが呼び出されたときにセルへの参照がなく、このメソッドが呼び出されたときにセルを返さない。代わりに、このメソッドは、セルに表示される画像をダウンロードするネットワーク要求を起動するなどの処理を行う必要があります。
注:これらのすべてのシナリオでは、任意の時点で表示できるセルが8つあるとします。
のUITableView:(オプション:no prefetching
、またはprefetch data
)
- はこれまで、細胞をプリフェッチしません。つまり、表示されていない
indexPath
にはcellForRowAtIndexPath
は決して呼び出されません。
- したがって、UITableViewには
isPrefetchingEnabled
というプロパティはありません。
- データのプリフェッチを
prefetchDataSource
で行うことができます。
- テーブルビューはless aggressive with reusing cellsのように見えますが、再利用されたセルが画面に戻ったときにも
cellForItemAtIndexPath
を呼び出すように見えます。 (私は特にコレクションビューのために、これまでのようにいくつかのより多くの調査を行う必要があるかもしれないが。)
UICollectionView:(オプション:no prefetching
、prefetch cells
、またはprefetch cells and data
)
- プリフェッチ細胞をデフォルトではつまり、直ちに表示されないセルに対しては
cellForItemAtIndexPath
を呼び出します。 - セルのプリフェッチは、ユーザーがコレクションビューを上下にスクロールするときにのみ開始されます。言い換えれば、ビューがロードされたときに、
cellForItemAtIndexPath
に正確に8回の呼び出しを行います。ユーザーが一度スクロールすると表示されないセルが表示されます(たとえば、スクロールして2-10を表示すると、11-14が表示される)。 - プリフェッチされた非表示のセルが画面に表示されると、
cellForItemAtIndexPath
を再度呼び出すことはありません。あなたが最初にやったインスタンス化がまだ有効であると仮定します。 - データのプリフェッチを
prefetchDataSource
で行うことができます。 prefetchDataSource
は、最初の負荷にのみ役立つことが分かります。上記の同じシナリオでは、最初の8つのセルが表示されると、たとえば、セル9〜14のデータのプリフェッチを起動することがあります。しかし、いったんこの初期メソッドが呼び出されると、その後は役に立たない。これは、prefetchItemsAt
の各呼び出しの直後にcellForItemAtIndexPath
が呼び出されるためです。たとえば、prefetchItemsAt:[14, 15]
の直後にcellForItemAt:14
、cellForItemAt:15
が続きます。 - すべてプリフェッチの動作を
isPrefetchingEnabled = false
に設定することができます。つまり、UICollectionViewをUITableViewと同様に動作させることはできません(prefetchDataSource
)。つまり、UICollectionView prefetch data
のみを持つことはできません。
visibleCells
、indexPathsForVisibleRows
、そして彼らが言うようにcellForItemAtIndexPath
が正確に実行します:彼らは唯一見える細胞を扱う両方については
。同じシナリオでは、20個のセルが読み込まれていますが、8個しか表示されません。これら3つの方法のすべては、8つのオンスクリーン細胞についてのみ報告する。
これはどういう意味ですか?
- UITableViewを使用している場合、そのまま使用することができ、ロードされたセルと表示されているセルの違いについて心配する必要はありません。それらは常に同等です。
- UICollectionViewでは、この違いが気になる場合は、読み込まれた非表示のセルと表示されているセルを追跡するために、いくつかのブックキープを行う必要があります。これを行うには、データソースとデリゲートメソッドのいくつかのメソッドを調べます(willDisplayCell、didEndDisplayingCellなど)。
新しいプロトコル私はそれについて記事を書いて、いくつかの測定を行ったiOSの10にUITableView' ''ためUITableViewDataSourcePrefetching'があります:https://andreygordeev.com/2017/02/20/uitableview-prefetching/ –