定时器的回调方法在ios9系统上崩溃的问题

在最近的bugly系统上出现了如下的问题

在通过查找后发现问题主要出现在ios9的系统上

原因是 self.timer = [NSTimer scheduledTimerWithTimeInterval:5 repeats:YES block:^(NSTimer * _Nonnull timer) {

}];

在保存草稿箱的时候使用了上面的定时器方法,而ios9以上的系统对内存回收机制做了修改,当对象函数运行中对对象本身进行释放时,会到函数运行结束完后才真正释放,ios9以前的系统会在函数运行中立即释放对象,不会等到函数运行结束,如果该函数之后对对象进行操作就会crash。


修改成下面的方法控制器就会持有定时器,不会被自动释放

self.timer = [NSTimer scheduledTimerWithTimeInterval:5  target:self selector:@selector(doSavePosts) userInfo:nil  repeats:YES];


但需要在离开的时候实现下面的方法将定时器进行释放

    if (self.timer && [self.timer isValid])

    {

        [self.timer invalidate];

        self.timer=nil;

    }

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容