標籤:
其實 UITableView 應該是在iOS開發中使用最頻繁的一個控制項,一次同事之間聊天玩笑的說“一個頁面,要是沒使用UITableView,就好像稱不上是一個頁面”。雖然是個最常見的控制項,但是他的強大是不可否認的,也是出錯很高的一個控制項。
1.
- (UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath
其實這個方法已經存在很久了,但是想我這樣接受新鮮事物能力差一點的人,還是用不習慣。
使用這個方法需要配套使用
- (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,再進行使用,具體的方法網上應該有很多的介紹,在這裡我就不多說了,這樣使用完代碼非常整潔。
不過需要說明的是,如果不先進行註冊,則會引起崩潰。
今天要說明的第一個閃退,引起的原因就是這個,
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
上面這段代碼,看起來正常無比,但是今天引起閃退的主角就是它,原因就是它加錯了位置。
它被放在了註冊cell之前,tableView在進行分割線的設定時候,找到了自己的cell,發現cell並沒有,然後引起了閃退。
解決辦法 把
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;放在
registe之後就可以了;
2.layout引起的閃退
-(void)layoutSubviews{ [super layoutSubviews];}
咦!!!又是很常見的代碼呀,雖然前輩們經常教育我們,不要在這裡處理太多的邏輯,代碼,但是我們還是喜歡把大量的代碼,尤其是效果放在這個裡面,因為真的很好用。
不過這裡 好用是好用,但是不能亂用,這裡說實話呢,是真的不應該放太多的處理,除非不得不,而且使用的時候也有要注意的地方,這次我們一起閃退就是在
[super layoutSubviews];
後面進行了一些autolayout的操作,導致崩潰
以上就是我今天和大家分享一點開發中遇到的問題,歡迎各位高手補充呀,說的不對的地方求指正!!!
iOS UITableView 引起的崩潰問題