1.autorelease 基本用法
2.autorelease 的優點
因為只有在自動釋放池銷毀的時候它里面的對象才銷毀,因此不用關心對象銷毀的時間也就不用關心什么時候調用release
3.autorelease 使用注意
4.atureleasepool自動釋放池
自動釋放池存儲于內存中的棧中遵循"先進后出"原則
#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]){ // 自動釋放池1 @autoreleasepool {
// 對象的釋放交給 自動釋放池去管理 不用再寫[person release] Person *person = [[[Person alloc] init] autorelease]; // 再創建一個自動釋放池2 @autoreleasepool { Person *person2 = [[[Person alloc] init] autorelease]; } Person *person3 = [[[Person alloc] init] autorelease]; } return 0;}
從上面的代碼可以看出:執行代碼時首先是person2對象先被銷毀,然后是外面的對象person和perons3 內存中的表現如下:

5.使用常見錯誤
// 銷毀自動釋放池的時候 要對person再執行release操作的話 會報野指針錯誤 @autoreleasepool { Person *person = [[[Person alloc] init] autorelease]; [person release]; }
// 對象執行兩次autorelease意味著自動釋放池銷毀的時候 對象會執行兩次release操作 會報野指針錯誤 @autoreleasepool { Person *person = [[[[Person alloc] init] autorelease] autorelease]; }
新聞熱點
疑難解答