iOS UITableView 引起的崩潰問題
其實(shí) UITableView 應(yīng)該是在iOS開發(fā)中使用最頻繁的一個控件,一次同事之間聊天玩笑的說“一個頁面,要是沒使用UITableView,就好像稱不上是一個頁面”。雖然是個最常見的控件,但是他的強(qiáng)大是不可否認(rèn)的,也是出錯很高的一個控件。
1.
- (UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath
其實(shí)這個方法已經(jīng)存在很久了,但是想我這樣接受新鮮事物能力差一點(diǎn)的人,還是用不習(xí)慣。
使用這個方法需要配套使用
- (void)registerNib:(nullable UINib *)nib forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(5_0); - (void)registerClass:(nullable Class)cellClass forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(6_0);
需要在前面先注冊cell,再進(jìn)行使用,具體的方法網(wǎng)上應(yīng)該有很多的介紹,在這里我就不多說了,這樣使用完代碼非常整潔。
不過需要說明的是,如果不先進(jìn)行注冊,則會引起崩潰。
今天要說明的第一個閃退,引起的原因就是這個,
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
上面這段代碼,看起來正常無比,但是今天引起閃退的主角就是它,原因就是它加錯了位置。
它被放在了注冊cell之前,tableView在進(jìn)行分割線的設(shè)置時候,找到了自己的cell,發(fā)現(xiàn)cell并沒有,然后引起了閃退。
解決辦法 把
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;放在
registe之后就可以了;
2.layout引起的閃退
-(void)layoutSubviews { [super layoutSubviews]; }
咦!??!又是很常見的代碼呀,雖然前輩們經(jīng)常教育我們,不要在這里處理太多的邏輯,代碼,但是我們還是喜歡把大量的代碼,尤其是效果放在這個里面,因為真的很好用。
不過這里 好用是好用,但是不能亂用,這里說實(shí)話呢,是真的不應(yīng)該放太多的處理,除非不得不,而且使用的時候也有要注意的地方,這次我們一起閃退就是在
[super layoutSubviews];
后面進(jìn)行了一些autolayout的操作,導(dǎo)致崩潰
以上就是我今天和大家分享一點(diǎn)開發(fā)中遇到的問題,歡迎各位高手補(bǔ)充呀,說的不對的地方求指正!??!
浙公網(wǎng)安備 33010602011771號