Obj-c記憶體管理

來源:互聯網
上載者:User
Obj-c為每個對象提供一個內部計數器,負責跟蹤對象的引用次數,引用次數的增減分別對應NSObject的retain和release方法,當引用次數為0時,對象將會得到馬上回收。對象的建立     alloc和copy系列方法,都會發送一條retain訊息,引用計數都會加1,     "是誰生的孩子,就應該誰來養"重寫dealloc方法     當對象包含其他對象時,就得在dealloc方法中釋放他們     -(void) dealloc{          [myvar release];          .......          [super release];     } 記憶體自動釋放池     Autorelease pool提供了一個對象容器,當對象發送autorelease訊息時,對象的引用計數並不減少,記憶體自動釋放池會添加一條相應的記錄,記錄下對象的這種要求,當記憶體自動釋放池發送release訊息時,會通知池中的所有對象去發送release訊息,引用計數才會真正減少模板代碼     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];     [myobject autorelease];     ......     [pool release];屬性的記憶體管理     設定屬性和構造方法中初始化成員變數的值時很容易引發記憶體泄露          //錯誤的寫法     -(void) setTitle:(NSString*) newTitle{          //舊的title的記憶體並沒有得到釋放          //並且這樣只是對指標的賦值,很容易引發問題          title = newTitle;     }      //正確的寫法(相當於屬性參數中的retain參數)     -(void) setTitle:(NSString*) newTitle{          //確保傳進來的newTitle不會被release          [newTitle retain];          //釋放舊的title          [title release];          //建立一個新的title          title = [[NSString alloc] initWithString:newTitle];          [newTitle release];     }     //正確的寫法(相當於屬性參數中的copy參數)     -(void) setTitle:(NSString*) newTitle{          //確保傳進來的newTitle不會被release          [newTitle copy];//只對實現了NSCopying協議的對象成立          //釋放舊的title          [title release];          //建立一個新的title          title = [[NSString alloc] initWithString:newTitle];          [newTitle release];     }     assign參數適用於基本類型直接賦值     -(void) setAge:(int) newAge{           age = newAge;       }構造方法記憶體管理寫法     -(id) initWithTitle:(NSString*) newTitle{          self = [super init];          if(self){               [self setTitle:newTitle];                              //這種寫法會發生記憶體泄露和指標問題,是錯誤的寫法               //self->title = newTitle;          }     }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.