- 场景2:数组添加数据对象时nil解决办法:添加对象到数组前,断定是否是nil
一、捕获iOS Crash
解释:数组的删除等操作处理类似,数组操作前要进行数据校验。
2、多线程下的Crash
一般多线程产生的Crash,会收到SIGSEGV旌旗灯号,注解试图拜访未分派给本身的内存, 或试图往没有写权限的内存地址写数据。
- 场景1:子线程中更新UI
解决办法:将UI更新操作放在主线程中,可以应用performSelectorOnMainThread 或 GCD
- //子线程中,应用宏将更新UI的义务派发到主队列
- #define dispatch_main_sync_safe(block) \
- if ([NSThread isMainThread]) { \
- block(); \
- } else { \
- dispatch_sync(dispatch_get_main_queue(), block); \
- }
- #define dispatch_async_main(block) dispatch_async(dispatch_get_main_queue(), block)
- 场景2:多线程中创建单例解决办法:应用dispatch_once,包管代码只履行一次,包管线程安然。
- //以QSAccountManager单例为例
- static QSAccountManager *_shareManager = nil;
- + (instancetype)shareManager{
- static dispatch_once_t once;
- dispatch_once(&once, ^{
- _shareManager = [[self alloc] init];
- });
- return _shareManager;
- }
- + (instancetype)allocWithZone:(struct _NSZone *)zone{
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- _shareManager = [super allocWithZone:zone];
推荐阅读
cp 13 /home/m/Downloads/Compressed 因为我们已经知道文件名包含 .zip 扩大名,是以我们可以应用 .zip 扩大名进行搜刮。它将限制输出结不雅并显示所需的过程。很多情况下,删除的文件都可以恢复,比>>>详细阅读
本文标题:浅谈iOS Crash(一)
地址:http://www.17bianji.com/lsqh/36347.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示