正如本书"适用于iOS和OS X的专业多线程和内存管理"说:"当通过__weak限定变量访问对象时,该对象已被添加到自动释放池" http://bit.ly/QdWX6n
id __weak obj1 = obj;
NSLog(@"%@", obj1);
源代码等同于以下内容:
/* pseudo code by the compiler */
id obj1;
objc_initWeak(&obj1, obj);
id tmp = objc_loadWeakRetained(&obj1); objc_autorelease(tmp);
NSLog(@"%@", tmp); objc_destroyWeak(&obj1);
我在阅读本书时测试了这段代码。一切都像书中的一样。 但是现在我在自动释放池中没有任何对象。而不是汇编程序对我说使用弱引用对象看起来像这样:
objc_loadWeakRetained
* using
objc_release
因此,在自动释放池中没有任何内容,并且对象在使用后立即释放。
问题:改变了什么,现在为什么会这样?在哪些情况下调用objc_loadWeak
,而objc_loadWeakRetained
只调用objc_release
?