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;
网友评论