当你向一个对象发送一个autorelease消息时,Cocoa就会将该对象的一个引用放入到最新的自动释放池。它仍然是个正常的对象,因此自动释放池定义的作用域内的其它对象可以向它发送消息。当程序执行到作用域结束的位置时,自动释放池就会被释放,池中的所有对象也就被释放。
-
OC是通过 referring counting ,引用计数,的方式来管理内存的。
对象开始分配内存,调用 alloc 方法,retainCount = 1;每次 copy , retain , retainCount + 1;每次 release , autorelease , retainCount - 1;当 retainCount = 0,系统就会调用 dealloc 方法,销毁对象。 -
NSAutoreleasePool 就是用来做引用计数的管理工作的,这个东西一般不用管。
-
autorelease 和 release 没什么区别,只是 retainCount - 1的时机不同而已,autorelease 会在对象的使用真正结束的时候才将retainCount - 1。
如有不当、错误之处,欢迎指正!
网友评论