這段objective-c代碼如何理解?

===題目被修改了,原題目是「這段咒語如何解讀?」既然被人吐槽是標題黨了,就這樣改吧。===

傳聞是「魔法學校目標C學院」的基礎咒語,照著這段咒語念完之後,實現了魔法,但是不知道這段咒語的原理是什麼?


咒語名稱:cellForRowAtIndexPath

辛達林念法:aras nan aran

施放難度:??

施法前謠:TableViewDelegate TableViewDataSource

這是《iOS派黑魔法從入門到精通》的初級咒語,它召喚一個名叫`StringCell`的幻象,並以名叫`data`的數據天書依次將它們銘刻,最後展示在聖器「喬布斯之鏡」的表面。


這種iOS最最最基礎的代碼你都跑到知乎上來提問....?

UITableView是iOS裡面用的最多的幾個空間之一了吧?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath是UITableView最主要的一個協議了吧?

隨便google一下或者任何一本教材都會講這個...伸手黨做成這樣真的好嘛...?

最基礎的cell復用啊...


這是一個方法的實現。

這個方法由 UITableViewDataSource 協議所定義,實現了這個方法,就可以向 UITableView 提供 Cell。

當 UITableView 的 dataSource 指定為當前對象的時候,UITableView 就會調用該方法獲取每一行的 UITableViewCell 進行展示。

------------ 更新

每次 UITableView 要顯示一個 Cell 的時候,就會調用這個方法。

比如,當 UITableView 要顯示 Section 0, Row 0 的時候,會調用這個方法,傳參 indexPath = { 0, 0 },顯示 Section 0, Row 1 的時候,會再次調用,傳參 indexPath = { 0, 1 } 。


為了節省內存 根據標識進行的cell重用而已嘛


方法是tableview的dataSource協議之一(不明白為啥那麼多人都說delegate,delegate主要用來設置tableview的一些屬性,dataSource主要用來設置tableview的內容),實現用了tableviewcell的復用機制,看樣子題主貼的應該是在storyboard中定義好的cell,如果是代碼或者xib文件定義的cell,需要先在tableView中註冊(registerClass:forCellWithReuseIdentifier:或者registerNib:forCellWithReuseIdentifier:)再復用


手機碼字,不講太詳細。

這裡實現了 tableview 的一個 delegate 方法,當 tableview 需要的時候,它會跟你要指定 index 顯示的 tablecellview,所以這個方法應該返回一個 view,並且根據 index 設置顯示的內容。

第一行是給出一個標籤(因為一個 table 內可能放了幾種 cell)

第二行試圖通過標籤找一個可重用的 cell,比如你滑動到底部的時候,頂部的 cell 就離開屏幕範圍了,會被回收。

後面兩行是根據 index 給 cell設置了內容。

這段代碼應該無法運行。

因為第二行未必能返回一個 cell,正確的代碼需要檢查結果是否為 nil 並創建一個 cell。這段代碼並沒有新建 cell 的部分,所以不可能有可復用的 cell。

oc 給出這個概念是因為創建一個複雜結構的 cell 成本比較大,而且在行數不確定的情況下為每行保留 cell 浪費內存。這裡是用每次重新設置數據的時間來節省內存。

如果行數少,或者配置數據特別耗費時間的話,可以不用這一套。


這是cell復用無疑,

dequexxxx: forIndexpath:這個方法是在使用Xib的時候使用的,跟純代碼書寫是有區別的


樓主是想問為何給Cell添加內容,需要註冊一個標識符嗎?


什麼魔法,不就是返回一個可重用的cell嗎?我也是醉了


這是UITableView的一個數據源代理方法,裡面設計到了cell的重用和模型數據賦值,在上述方法中可分為三大步驟,第一,創建cell,第二,賦值,第三,返回cell


第一行,定義靜態變數。

第二行,獲得一個cell對象。

第三行,獲取數據。

第四行,設置cell內容。

第五行,把cell現實在 表格中去。


代理方法實例化tableviewcell


就是復用,拿時間去換內存空間


這是UITableViewDataSource Protocol其中的一個必須實現的方法。這個方法所在的object被設置為UITableView的dataSource。而UITableView在顯示的時候,每個單元格都調用這個方法得到一個UITableViewCell,然後顯示在單元格中。

如果每個Cell都新建的話,iOS的內存會消耗很快,所以iOS使用重用Cell的方法。當表格的Cell看不到的時候,這個Cell就可以被重用。方法中的dequeueReusableCellWithIdentifier是從UITable中取得一個可以重用的Cell。如果沒有可重用的,就alloc一個。

然後Cell中默認有幾個屬性,包括左側的圖片,中間的文本和右側的圖標。cell.textLabel.text就是給默認有的文本控制項賦值。最後return cell用來給Table顯示


推薦閱讀:

富士康有哪些黑科技?
「球形輪胎」對城市交通有何影響?有哪些好處和壞處?
為什麼只有題主覺得小米根本就沒有功能和技術可以算得上黑科技?
不用滑鼠/鍵盤而直接用思維/意識操作電腦,離實際應用還有多遠?
有哪些失傳的古代技術或黑科技?

TAG:iOS開發 | Xcode | Objective-C | 黑魔法 | 黑科技 |