圖片來源:
raywenderlich
IMG_0964.jpg
主線程中一些比較耗時的操作:
- 尺寸計算和約束:
heightForRowAtIndexPath
或者是sizeThatFits
- 圖片解碼
- 繪制
- 對象生命周期的管理
介紹ASDisplayNode
ASDisplayNode是對UIView的封裝筐高,類似于UIView和CALayer的關(guān)系吐葱。和UIView不同的是,Node默認(rèn)在后臺隊列并發(fā)進(jìn)行渲染偎快。
Node容器類
Node真正發(fā)揮功效是和以下四個容器類結(jié)合的時候:
- ASViewController :繼承自UIViewController,你可以為該控制器提供被管理的Node封恰。
- ASCollectionNode and ASTableNode :類似于UICollectionView和UITableView
- ASPagerNode :相比于UIPageViewController耘分,提供更強大的滑動性能。
總結(jié)方法-tableNode:nodeBlockForRowAtIndexPath:
:
-
ASCellNode
類似于UITableViewCell
壹店,有一點需要去注意猜丹,類似于-tableView:cellForRowAtIndexPath:
的方法-tableNode:nodeBlockForRowAtIndexPath:
返回值是一個block-ASCellNodeBlock
。這是因為ASTableNode
內(nèi)容維護(hù)所有的cell茫打,并且為indexPath返回一個block居触,當(dāng)它準(zhǔn)備好的時候,它能并發(fā)初始化所有的Cell老赤。 - block中的返回值必須是
ASCellNode
轮洋。
總結(jié)方法-tableView:
- 這個方法取代
tableView:heightForRowAtIndexPath
。 - 在ASDK中抬旺,所有的
ASCellNode
負(fù)責(zé)定義他們自己的size弊予。在該方法中你可以可選的定義一個最小和最大的size為你的cell。
ASRangeController
每一個被這個容器包含的node會有以下三種狀態(tài):
- Preload Range :處于這個狀態(tài)的node要用來獲取model开财。
- Display Range :處于這個狀態(tài)的node要用來繪制文本汉柒,圖片解碼。
- Visible Range : 處于這個狀態(tài)的node要用來顯示在屏幕上责鳍。
Node接口狀態(tài)(interfaceState)回調(diào)
這些node的狀態(tài)是如何正確的協(xié)調(diào)工作的碾褂?
每個node都有一個interfaceState
的屬性,所有的node被ASRangeController統(tǒng)一協(xié)調(diào)更新历葛。
幸運的是我們不需要直接操作node的interfaceState
屬性正塌,我們只需在 interface state 回調(diào)中做出響應(yīng)即可嘀略。
給Node命名
為了在滾動過程中觀察每個node的狀態(tài),我們可以通過如下方法給node命名:
在-tableNode:nodeBlockForRowAtIndexPath:
中添加如下方法d
node.debugName = [NSString stringWithFormat:@"cell %zd", indexPath.row];
texture官網(wǎng)
texture翻譯
預(yù)加載與智能預(yù)加載(iOS)
iOS 開發(fā)一定要嘗試的 Texture(ASDK)