奔溃问题总结篇
点击通知启动进入app,直接闪退提示
application windows are expected to have a root view controller
原因是过早在应用中显示通知内容,另外给window设置好rootViewController,视图未出现即显示其它子控件
刷新UITableView数据时出现奔溃
调用:
[listView reloadSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 4)] withRowAnimation:UITableViewRowAnimationAutomatic];
改成
[listView reloadData]
可以解决(问题出现在iOS11之前的版本,应该是UITableView改版,将布局代码执行的顺序改变导致低版本布局出问题)
除了reloadData方法,其他reload方式,如果存在indexPaths的变化,必须写在beginUpdates和endUpdates之间,同时使用insertRows和deleteRows说明indexPaths的变化情况,否则会出现Crash。
在AVAudioEngine使用过程中,设置属性并且调用了[[AVAudioSession shareSession] setAvtivite:YES error:nil];导致设置不成功(具体不明确)而奔溃
https://www.jianshu.com/p/6492779cb89e 由于给定的图片格式导致在iOS9.3之前的版本出现奔溃
由于权限未定义或者未赋予导致奔溃
由于需要主线程进行的视图更新在子线程中进行了导致奔溃
由于在销毁对象时对象无法销毁导致奔溃(SGRMTP中出现,直接去掉该属性)
下面的代码会?Compile Error / Runtime Crash / NSLog…?
@interface NSObject (Sark)
+ (void)foo;
@end
@implementation NSObject (Sark)
- (void)foo {
NSLog(@"IMP: -[NSObject (Sark) foo]");
}
@end
// 测试代码
[NSObject foo];//一个类也是一个NSObject对象?所以也通过NSObject对象方法来执行
[[NSObject new] foo];
测试结果:如果在同一个类.m里面则会出现一个警告,但是都能正常输出(编译时都能找到方法,但是警告类方法未实现)
拓展一:如果不是NSObject执行会crash(找不到类方法的实现,说明之前的能执行是因为还是NSObject对象来执行的)
拓展二:改为ViewController的分类以后,在同一个文件中,执行[[ViewController class] foo]; 结果为编译不报错,执行时报错。