“我怎么能?”;“形象化”;(观察)iOS中是否有线程退出?
在学习thread and run loop时,我注意到一些文章说:“通常,一个线程在完成其工作后就退出了。”因此,有时有必要使用“我怎么能?”;“形象化”;(观察)iOS中是否有线程退出?,ios,multithreading,runloop,Ios,Multithreading,Runloop,在学习thread and run loop时,我注意到一些文章说:“通常,一个线程在完成其工作后就退出了。”因此,有时有必要使用nsrunlop创建一个所谓的“不朽线程”(?我不知道英语中的确切术语) 问题是,我怎样才能证明“一旦它完成了工作就存在”这句话?我是这样编码的 -(void)dosomethingon线程{ //调度异步(调度获取全局队列(调度队列优先级默认为0)^{ //NSLog(@“我在线程%@,[NSThread currentThread]); // }); NST
nsrunlop
创建一个所谓的“不朽线程”(?我不知道英语中的确切术语)
问题是,我怎样才能证明“一旦它完成了工作就存在”这句话?我是这样编码的
-(void)dosomethingon线程{
//调度异步(调度获取全局队列(调度队列优先级默认为0)^{
//NSLog(@“我在线程%@,[NSThread currentThread]);
// });
NSThread*thread1=[[NSThread alloc]initWithBlock:^{
NSLog(@“我在线程%@,[NSThread currentThread]);
}];
thread1.name=@“thread1”;
[线程1开始];
[[NSNotificationCenter defaultCenter]addObserver:自选择器:@selector(threadExitHandler:)名称:NSThreadWilleExitNotification对象:nil];
}
-(无效)螺纹出口编号:(NSNotification*)noti{
NSLog(@“线程将退出:%@”,noti);
}
嗯,通知处理程序没有被调用
那么,[1]:如何证明线程存在?[2] :什么类型的线程会有这样的行为?(我知道主线程永远不会退出,其他线程呢?
GCD
threads,例如?如果要可视化它,我可能会使用调试器。例如,我在NSThread
子类中设置了一个断点,我在Xcode的左面板中看到了线程:
但是如果在main
方法完成后一秒钟触发另一个断点,我会看到相关的“线程将退出”消息,我的线程不再存在:
或者,您可以在NSThread
子类的dealloc
方法中添加NSLog
语句,这也将演示其释放。或者在调试内存对象图中查找子类
嗯,通知处理程序没有被调用 我建议您在开始线程之前添加您的观察者。现在,在这个线程的开始和退出以及添加观察者之间有一个竞争条件。FWIW,我确实看到了“线程将退出”消息 虽然了解线程和运行循环很好,但它现在几乎没有实际用途。掌握GCD可能更有用,它使我们摆脱了线程的杂草,并为编写健壮的多线程代码提供了性能优化和更丰富的API
关于GCD是否创建持久性线程,答案是肯定的,但我们对这个细节进行了抽象。但GCD的性能优化之一是它为我们管理一个“线程池”,而不是不断地旋转新线程,并不断地为每个调度的代码块销毁它们 你可能想看2016年的WWDC。它遍历队列、线程和运行循环之间的关系