首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

RunLoop总结:RunLoop的应用场景(五)阻止App崩溃一次

IOS程序异常crash捕获与拦截 (我下面的Demo 就是在这部分代码上做了简化,以方便理解) 原理 iOS应用崩溃,常见的崩溃信息有EXC_BAD_ACCESS、SIGABRT XXXXXXX,而这里分为两种情况...- (void)setCatchExceptionHandler { // 1.捕获一些异常导致的崩溃 NSSetUncaughtExceptionHandler(&HandleException...]; NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; [userInfo setObject:callStack...第五步,写一段会导致崩溃的代码 我是在ViewController 中添加了一个点击事件,弄了一个数组越界的Bug: - (void)touchesBegan:(NSSet *)touches...遇到数组越界,应用依然没崩溃 sunnyxx 称之为回光返照,为什么呢? 我再一次点击视图,应用依然还是崩溃了,只能防止第一次崩溃。 我测试了,确实是第二次应用崩溃,未能起死回生。

1.7K31

扒虫篇-崩溃日志解读及Crash收集

线上崩溃可以通过 iTunesConnect 中心的Cash收集,也可以通过第三方Cash收集工具,亦或自己在工程中手动收集崩溃日志上传到服务器中,本文做个小结,希望对初入者能有些帮助。...使用第三方软件:itools等 如果你平时不用iTunes,而是使用itools这类第三方的软件对iPhone设备进行管理,也是没问题的。 ?...收集崩溃日志 获取崩溃信息方式 在iOS中获取崩溃信息的方式有很多,比较常见的是使用友盟、云测、百度、Crashlytics等第三方分析工具,或者自己收集崩溃信息并上传公司服务器。...下面列举一些我们常用的崩溃分析方式: 自己实现应用内崩溃收集,并上传服务器。 使用友盟、云测、百度、Crashlytics等第三方崩溃统计工具。..., 会导致其它工具收集不全的问题。

2.9K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    iOS 开发:『Crash 防护系统』(二)KVO 防护

    KVO 允许一个对象监听另一个对象特定属性的改变,并在改变时接收到事件。但是 KVO API 的设计,我个人觉得不是很合理。被观察者需要做的工作太多,日常使用时稍不注意就会导致崩溃。...KVO 日常使用造成崩溃的原因通常有以下几个: KVO 添加次数和移除次数不匹配: 移除了未注册的观察者,导致崩溃。 重复移除多次,移除次数多于添加次数,导致崩溃。...添加了观察者,但未实现 observeValueForKeyPath:ofObject:change:context: 方法,导致崩溃。 添加或者移除时 keypath == nil,导致崩溃。...KVO 防止 Crash 常见方案 为了避免上面提到的使用 KVO 造成崩溃的问题,于是出现了很多关于 KVO 的第三方库,比如最出名的就是 FaceBook 开源的第三方库 facebook / KVOController...经测试可以发现,成功的拦截了这几种因为 KVO 使用不当导致的崩溃。

    4.4K41

    透彻理解 NSNotificationCenter 通知

    修饰,当响应者释放会出现野指针,向野指针发送消息造成崩溃;在iOS 9(更新的系统版本有待考证)之后,苹果对其做了优化,会在响应者调用dealloc方法的时候执行removeObserver:方法。...defaultCenter] addObserver:self selector:@selector(respondsToNotification:) name:@"test0" object:nil]; } //该代码导致的结果是...可能有人会问,为什么系统库没有做个重复添加的判断?当然,这可能是为了让我们更灵活的运用,也可能是对时间复杂度的一种妥协吧?。...有过比较长开发经验的同学应该都有过,没有及时的移除通知而导致意外崩溃的情况。...这就是为什么不直接使用observer响应者对象对比做释放操作。 写在后面 关于实现部分,虽然我做了个大致的测试,可能还是会存在一些潜在的问题,希望各位大佬不惜笔墨点拨一番?。

    2.4K70

    精选面试题教你应对高级iOS开发面试官(提供底层进阶规划蓝图)

    1、NSString、NSArray、NSDictionary等等经常使用copy关键字,是因为他们有对应的可变类型:NSMutableString、NSMutableArray、NSMutableDictionary...1、添加,删除,修改数组内的元素的时候,程序会因为找不到对应的方法而崩溃,因为copy 就是复制一个不可变NSArray的对象; 2、使用了atomic属性会严重影响性能﹔ 如何让自己的类用copy修饰符...假如一个属性被声明为dynamic var,然后你没有提供@setter方法和@getter方法,编译的时候没问题,但是当程序运行到instance.var = someVar,由于缺 setter方法会导致程序崩溃...;或者当运行到someVar = var时,由于缺 getter方法同样会导致崩溃。...NSRunLoop对象,这就解释了∶ 为什么我们的应用可以在无人操作的时候休息,需要让它干活的时候又能立马响应。

    55100

    【IOS开发基础系列】Xcode工具使用技巧

    1.2.2 dSYM文件有什么作用         当我们软件 release 模式打包或上线后,不会像我们在 Xcode 中那样直观的看到用崩溃的错误,这个时候我们就需要分析 crash report...大前提是我们需要有软件版本对应的 dSYM 文件,这也是为什么我们很有必要保存每个发布版本的 Archives 文件了。.../xuhanhanhan/article/details/50580093         现在是2016年一月份,已经不能在iTunes Connect查看崩溃日志上查看崩溃日志了,现在苹果的做法是你在...xcode上登录你的账号,打开xcode,点击上面的window选择organizer,出现如图 ,然后选择你要查看的版本,就可以看对应的崩溃日志。..._dataDic) {         _dataDic = [[NSMutableDictionary alloc] init];     }     return _dataDic; } 2.2 调试问题

    50820

    浅入深出Copy和mutableCopy

    ,b,c); 输出结果: abcabcabc,abcabcabc,abcabcabc 0xf9f7789ebc9c00cc,0xf9f7789ebc9c00cc,0x6000011f7090 疑问 为什么...所以只需要拷贝一个新的指针去指向a指向的地址就可以了。而c是a mutableCopy得来的。因为变成NSMutableString 而且不影响之前的对象,所以要拷贝出一个新的内存空间。...所以这里就引出一个概念 深拷贝 内容拷贝 创建新对象 浅拷贝 指针拷贝 引用计数+1 为什么浅拷贝要引入计数+1 因为a 和 b 指向同一个内存地址。...而此时b 还在引用释放的内存空间,就会产生坏内存访问的崩溃现象 其他拷贝对象同理 不可变copy 为浅拷贝 注意 Tagged Pointer对象比较特殊。不用管理引用计数。...总结 NSString NSMutableString NSArray NSMutablArray NSDictionary NSMutableDictionary copy 浅拷贝 深拷贝 浅拷贝

    53220

    iOS内存管理(三)-深拷贝和浅拷贝

    概念浅拷贝:浅拷贝就是指针拷贝,就是拷贝一份指向该对象的指针,就是复制的对象和原对象都指向同一个地址深拷贝:深拷贝是内容拷贝,真正的复制一份,复制对象的内容。复制的对象指向新的地址。...图片copy 和 mutablecopymutableCopy拷贝出来的对象类型总是可变类型(例如, NSMutableString, NSMutableDictionary, NSMutableArray...等等)mutableCopy拷贝出来的对象类型总是可变类型(例如, NSMutableString, NSMutableDictionary, NSMutableArray等等)对象要想具有copy和mutablecopy...功能要是NSCopying和NSMutableCopy协议,实现copywithzone和mutablecopywithzone图片NSString为什么用copy修饰,不用strong#import...但是 block 在创建的时候内存默认分配在栈上,而不是堆上的。所以它的作用域仅限创建时候的作用域内,当你在该作用域外调用该 block 时,程序就会崩溃。

    40110

    iOS理论基础(一)

    a.NSString、NSArray、NSDictionary 等等经常使用copy关键字,是因为他们有对应的可变类型:NSMutableString、NSMutableArray、NSMutableDictionary...这个类是 NSString 的子类,表示一种可修改其值的字符串,此时若是不拷贝字符串,那么设置完属性之后,字符串的值就可能会在对象不知情的情况下遭人更改。...所以,这时就要拷贝一份“不可变” (immutable)的字符串,确保对象中的字符串值不会无意间变动。只要实现属性所用的对象是“可变的” (mutable),就应该在设置新属性值时拷贝一份。...3.这个写法会出什么问题: @property (copy) NSMutableArray *array; a.添加,删除,修改数组内的元素的时候,程序会因为找不到对应的方法而崩溃.因为 copy 就是复制一个不可变...b.nonatomic 不是默认的 更快 线程不安全 如有两个线程访问同一个属性,会出现无法预料的结果 5.如何让自己的类用 copy 修饰符?如何重写带 copy 关键字的 setter?

    25420

    避坑!-重入锁之ReentrantLock写法

    : lock.lock()方法写在try里面 第二种写法会导致真实的崩溃信息被覆盖了,假设我们在lock.lock(); 上方加入这样一行代码int num = 1/0;代码如下: ReentrantLock...这样在实际的应用中对我们排查问题是有很大的阻碍性的。真实的崩溃信息被覆盖掉了 原因是: 因为上述代码无论是否会抛出异常,finally中的代码块都会被执行,最后会调用unlock()方法。...:lock()方法可能会抛出异常,然后会执行finally代码块中的unlock()方法,在unlock()方法中,会检查当前线程是否是拥有锁的线程,如果不是则会抛出异常,同样会导致真实的崩溃信息丢失(...导致覆盖掉lock.lock()出现异常的信息)。...既然unlcok()方法会抛出异常,为什么要写在finally代码块中呢? 因为如果程序出现异常,依然能够保证锁会被释放掉,避免死锁的发生。

    35320

    GB代码规范1.0

    GB代码规范 头文件#import的顺序(商量) 写法模板 #import #import 方库> #import "其他类" 尽量按照先系统类 第三方类 自己写的类顺序导入...= @"" 对于局部的变量尽量的初始化 局部的变量要初始化 属性有默认的值 所以我们不必须对于属性进行初始化 我之前遇到的一个BUG就是int类型没有初始化给我默认Nan造成崩溃 建议的写法 int...可能会出现大家想到一样的名字或者添加第三方库引入和第三方库名字一样 尽量加上前缀。...尽可能使用不可变的对象 对于OC存在很多可变的对象 比如NSMutableString NSMutableArray NSMutableDictionary等等 对于一些不允许改变的直接使用不可变对象...)写入垃圾值(garbage values),所以如果检查 error 的值可能导致错误 (甚至崩溃)。

    1.2K20

    iOS_Crash 四:的捕获和防护

    1.Crash 捕获 根据 Crash 的不同来源,分为以下三类: 1.2.NSException 应用层的异常,未被捕获的异常,导致程序向自身发送了 SIGABRT 信号而崩溃,是应用程序自己可控的...(&UncaughtExceptionHandler); } // 崩溃时的回调函数 static void UncaughtExceptionHandler(NSException * exception...C++ 异常后会将其转换为 OC 异常抛出,此时的调用堆栈是在异常发生时的队长;但若转换失败则会调用 __cxa_throw 抛出异常,此时的调用队长是处理异常的堆栈,导致原始异常调用堆栈丢失。...crash KVC 的搜索模式详情可见:iOS_KVC:Key-Value Coding-2(访问者搜索模式),当最终找不到对应的key时,会导致 crash。...*dict = [NSMutableDictionary dictionary]; [dict setObject:nil forKey:@"xxx"]; // Thread 1: "*** -[__

    71850

    iOS基础·属性的修饰词与setter的关系

    setter方法会导致程序崩溃;或者当运行到 someVar = var时,由于缺getter方法同样会导致崩溃。...这个修饰符不会牵涉到内存管理,但是如果是对象类型,可能会导致内存泄漏或者EXC_BAD_ACCESS错误。 除了assign以外的其他修饰符,是必须用于修饰OC对象的。...所以assign修饰的OC属性是非常危险的,比如,一些老的第三方框架用assign修饰的delegate属性经常会导致崩溃。 4.2 retain 4.2.1 基本特性 retain: 指针拷贝。...如果该对象被释放,那么相应的实例变量会被自动赋为nil,不会变为悬空指针(也称野指针)。悬空指针指向的是不再存在的对象,向悬空指针发送消息通常会导致程序崩溃。...用于修饰NSMutableArray,NSMutableDictionary等copy无法修饰的属性。

    1.1K20

    一份走心的iOS开发规范

    所以可能会导致某个父类的initialize方法会被调用多次,为了避免这种情况,我们可以使用类型判等或dispatch_once()这两种方式,以保证initialize中的代码不会被无辜调用。...如果存在继承的情况下,很有可能导致崩溃。...} 【必须】和init方法一样,禁止在dealloc方法中使用self.xxx的方式访问属性。如果存在继承的情况下,很有可能导致崩溃。...开发中,当你走投无路将要崩溃时,可以考虑使用通知;而当你频繁使用通知时,同样会让你崩溃到走投无路。所以,在每个应用中,我们应该时刻留意并控制通知的数量,避免通知满天飞的现象。...【建议】合理组织工程的内的文件夹,工程中一般包括但不限于以下几个文件夹category(分类)、util/helper(工具类)、resource(资源)、const(常量)、third(第三方)。

    12.1K145
    领券