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。