问题:看到很多程序,都是开始时NSAutoreleasePool *pool = [...];.....[pool release];中间甚至没有出现过[对象 autorelease],那么这些对象是怎么加入到pool中的了?
解答:自动释放池为自动释放对象提供了容身之处。
凡是不是通过alloc,new,copy这几种方法创建的对象,都属于自动释放的对象,它们不需要自己调用autorelease,系统会在这些对象创建时自动把它们放进最近的一个pool。
而对于通过alloc,new,copy这几种方法创建的对象,如果想利用pool的话,需要手动添加进去。对这些对象,autorelease 只是替代release来延长它的生命期。
如果要保留一个对象,retain和release的数量要相等。