1.xib实现的ViewController初始化时应使用的alloc initwithNibName
在loadView 时
1> 它会先去查找与UIViewController相关联的xib文件,通过加载xib文件来创建UIViewController的view
如果在初始化UIViewController指定了xib文件名,就会根据传入的xib文件名加载对应的xib文件
[[ViewController alloc] initWithNibName:@"ViewController"bundle:nil];
如果没有明显地传xib文件名,就会加载跟UIViewController同名的xib文件
[[ViewController alloc] init]; // 加载ViewController.xib
2> 如果没有找到相关联的xib文件,就会创建一个空白的UIView,然后赋值给UIViewController的view属性
摘自http://www.jianshu.com/p/9bf8f3de2cd1
但是iOS8时不支持(不知道什么时候变更的)
2. 使用僵尸对象(野指针)
使用场景:tableviewcell上有一个按钮点击事件由block实现,在block中又写有tableview的reload方法,导致一点击cell上的按钮,tableview刷新,当前cell就被释放重新加载了
//类似于这样
if (self.deleteBlock!=nil) {
//block中reload tableview 导致当前cell变成了野指针
self.deleteBlock(self.bmModel);
}
//此时调用的self(既cell)为野指针导致崩溃
//此句为举例,解决方法肯定就是block放在最后 后面不能再调用self的一些操作
self.mModel = nil;
3.数组越界
self.sectionCells[section].space_type != 0
(写在tableview的viewforhead代理中)
很奇怪在iOS8上会崩溃,这里崩溃原因是self.sectionCells越界,具体原因未知解决办法只需要判断一下是不是越界就行了
self.sectionCells.count>section&&self.sectionCells[section].space_type != 0
网友评论