第39题的一些疑问
jhz-libowen opened this issue · comments
ibowen commented
这个因为 [NSOperationQueue mainQueue] 并非单例,这个写法非常像单例,然后我运行下,发现不管在什么情况下 [NSOperationQueue mainQueue] 返回的地址都是相同的进一步证明了我的猜想,让后我下载了Gnustep源码,参考了下[NSOperationQueue mainQueue]和[NSNotificationCenter defaultCenter]写法一样都是单例,那么怎么确认是否有循环引用呢,
我参考了下NSNotificationCenter源码
这就证明了
然后参考addOperationWithBlock源码
所以[NSOperationQueue mainQueue]虽然是单例,但是不持有block,不会造成循环引用,传递完成就销毁了,不会造成无法释放的内存泄漏问题。
ChenYilong commented
赞, @jhz-libowen 文档已经更新勘误,并引用到本issue地址
ChenYilong commented
对于情况❸ NSNotificationCenterIVARBlock,我之前的分析也有误,_observer并不会持有block,而是由NSNotificationCenter持有。因此,这里同样没有形成循环引用,但是如果没有在合适的时机移除监听,将会导致内存泄漏。
文档已经更新 8a2daf0