關于UITableView& UICollectionView& 他們各自的協議,UITableViewDataSource& UITableViewDelegate UICollectionViewDelegate& UICollectionViewDataSource-- 實作一個方法有什么優點和缺點,而不是另一個或一組特定的方法,而不是其余的方法或特定方法的獨特組合?
例如,如果我要實施heightForFooter但不實施viewForFooter- 會發生什么或可能發生什么?這是否會對性能或表格視圖的滾動產生負面影響?
是否有指南表明如果實施了任何方法,其他方法應與它們結合并雙重實施?
uj5u.com熱心網友回復:
回復:正確性
是否有指南表明如果實施了任何方法,其他方法應與它們結合并雙重實施?
不是我所看到的,盡管有時檔案會提到它。例如來自NSTableViewDataSource 的檔案:
如果您不使用 Cocoa 系結向表視圖提供資料,則需要以下方法:
numberOfRows(in:)tableView(_:objectValueFor:row:)tableView(_:setObjectValue:for:row:)(僅限基于單元格的表格)
一般來說,如果一個方法是可選的,但從背景關系中需要,那么會有一個運行時錯誤告訴你實作它,例如:
非法
NSTableView資料源 (Foo)。必須實施numberOfRowsInTableView:和tableView:objectValueForTableColumn:row:
要么,要么東西會默默地失敗(例如,如果你不實作NSTableViewDelegate.tableView(_:viewFor:row:),就不會發生繪圖,你所有的單元格都只是空白視圖。
回復:性能
不實作可選方法不應該有任何真正的性能差異。
這些方法中的每一個都可能像在 Swift 中一樣被呼叫(這些框架中的大多數仍然在 Objective C 中實作):
let result: Result? = yourTarget.someMethod?(someArg)
這實際上只是以下的簡寫:
let result: Result? = yourTarget.responds(to: #selector(YourTargetsClass.someMethod))
? target.method(someArg)
: nil
也就是說,它是一種動態方法查找來檢查您的物件是否回應訊息,并且發送一個動態訊息以實際呼叫該方法(對于它確實回應的情況)。
有一個很小的優化可以在這里擠出:如果你的方法實作是空的,那么你最好根本沒有它。這將防止發送不必要的訊息。盡管在您確定它是分析器中的熱點之前,顯然不必擔心。
當然,沒有什么能阻止圖書館作者寫作:
if yourObject.responds(to: #selector(someMessage)) {
doSomethingVeryExpensiveForNoGoodReason()
}
......但這不太可能。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/481928.html
標籤:迅速 合适的视图 uicollectionview 合适的视图节标题 uicollectionviewdelegate
上一篇:隱藏UITableView的標題
