Autoreleasepool中的对象什么时候释放
[obj autorelease];
的实质是:
向autoreleasepool中添加obj
,即 [pool addObject:obj];
autoreleasepool在被废弃的时候会向pool中所有发送过autorelease
的对象发送release
消息,对象的引用计数减1。(并不一定就会被释放,可能引用计数减1后仍然>0)
对于每一个Runloop, 系统会隐式创建一个Autorelease pool,这样所有的release pool会构成一个象CallStack一样的一个栈式结构,在每一个Runloop结束时,当前栈顶的Autorelease pool会被销毁,这样这个pool里的每个Object会被release。