iOS開發(fā)之循環(huán)利用帶來的問題

iOS開發(fā)之循環(huán)利用帶來的問題

在iOS開發(fā)中,考慮到APP性能的問題,很多時候都會涉及到控件的循環(huán)利用問題,最經(jīng)典的就是tableView中的cell,在cell循環(huán)利用的過程中,cell上面的數(shù)據(jù)不可避免的也會被循環(huán)利用,幸運的是我們可以可以在:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    LXBMessageCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
    cell.news = self.news[indexPath.row];
    return cell;
}

方法中解決這種問題,最根本的原因就是每個cell "一一對應" 一個模型,當cell被循環(huán)利用的時候,傳給cell的是不同的模型,cell顯示的就是不同的數(shù)據(jù),所以此時cell的循環(huán)利用不會有數(shù)據(jù)的冗余問題.

當我們通過xib的形式自定義cell的時候,往往會向cell中添加很多的控件,有時我們可能要控制某些控件的顯示與隱藏,也可能要防止某些舊數(shù)據(jù)被循環(huán)利用,但是呢在原始模型中又還不存在與cell中那些控件(有冗余數(shù)據(jù)的那個控件)一一對應的那種數(shù)據(jù),所以我們沒有辦法通過原始模型去一一對應我們自定義的cell,這個時候不處理的話那些控件就會有數(shù)據(jù)的冗余問題
解決辦法:

  • 最關鍵的還是模型,抓住一點,要避免控件的循環(huán)利用帶來的數(shù)據(jù)冗余問題,就要保證每一個控件即將顯示的數(shù)據(jù)是不一樣的,是唯一的,其實就是保證cell與模型的一一對應關系

  • 控件的循環(huán)利用帶來的控件狀態(tài)的冗余問題(比如到底是讓他顯示還是隱藏的問題)主要有兩種解決方案

  • 一般情況下,首先在xib中將他的hidden為YES,以后在合適的地方再修改他的狀態(tài).

if(到了該顯示的時候) {
      控件.hidden = NO;
} else {
      控件.hidden = YES;
}```

  - 最OOP的解決辦法,我們可以在模型添加一個BOOL輔助屬性,用于記錄這個控件的狀態(tài),由于BOOL屬性的默認值是NO,恰好可以滿足我們的需求,
我們就可以在恰當?shù)臅r候去設置這個BOOL屬性值,比如:
```objc
@property (nonatomic,assign,getter=isSina_v) BOOL sina_v;
if(...) {
  self.sina_v = YES;
} else {
  self.sina_v = NO;
} 

控件.hidden = 模型.isSina_v;


- 控件的循環(huán)利用帶來的數(shù)據(jù)冗余問題
 - 針對這樣的問題一般可以通過在對應的模型中添加輔助屬性來解決,以后即使把這個cell循環(huán)利用到了其他地方,由于cell與模型的一一對應關系,其他地方的cell中的那個控件是無法取出這個數(shù)據(jù)的
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容