美文网首页
底层17:RunLoop-休眠、NSTimer失效、线程保活

底层17:RunLoop-休眠、NSTimer失效、线程保活

作者: 张无奈 | 来源:发表于2020-09-06 21:53 被阅读0次

RunLoop休眠

内核层面的API:不提供给开发者用。

应用层面的API:

RunLoop休眠的原理:通过mach_msg()让用户态跟内核态的切换,没有消息就切换到内核态休息,有消息就切换到用户态。

NSTimer失效

是因为在默认模式下,当拉拽的时候,应该在跟踪模式下,就不会执行。

RunLoop同一时间只能运行在某一种mode下,可以设置为NSRunLoopCommonModes

线程保活:

方法一如下:

上面代码会造成引用,控制器和线程在跳转下一个界面返回 都不会死,所以优化:

stop方法中waitUntilDone:设置为NO会导致坏内存报错,因为self已经销毁,继续执行会报错,需要改为yes。这样后还是会出现问题,因为self已经销毁,那么weakself.isStoped 就是为nil,取反为yes,会再次启动线程。所以需要在while循环改下条件如下:

这样以后还是会报错再次优化- (void)stopThread方法中将线程置为nil,在别的地方判断下线程不存在就会返回if (!self.thread) return;

相关文章

网友评论

      本文标题:底层17:RunLoop-休眠、NSTimer失效、线程保活

      本文链接:https://www.haomeiwen.com/subject/lldpsktx.html