Objective-C:保留計數器思想的詳解(對象的保留和所有權的釋放)

來源:互聯網
上載者:User

標籤:

對象的保留和所有權的釋放:

int main(int agrs,char *argv[]){   @autoreleasepool{              Person *person = [[Person alloc]initWithName:@“Tom"];    //retainCount=1              [person setName: name];  //retainCount = 2;              [person release];            }}@interface Person@property(nonatomic,retain)(NSString*)name;@end 詳解:在主函數main中建立了一個perosn對象,此時,main函數擁有對象person的所有權,保留計數器retainCount=1;緊接著,因為類Person的執行個體變數name類型retain是強引用,因此,main函數中person對象調用setName方法時,類Person也擁有了person對象的所有權,所以,Person類就將保留計數器加1用來保留住person對象,此時的retainCount=2;根據對象誰建立,誰釋放的原則,main函數中main函數擁有的perosn對象被main函數使用完後就釋放其所有權,隨即被main函數release掉了。此時,保留計數器retainCount=1,此時系統不會調用dealloc方法來銷毀對象,對象被保留給了類Person。等到最後,類Person用完了對象person後,類Person也應該釋放person對象的所有權,因此,就調用重寫的dealloc方法,在這個方法內release掉person所有權,retainCount=0,在完成父類的【super dealloc】後,這個perosn對象就徹底的被銷毀了。 總之兩句話:(1)誰在調用這個對象,就必須獲得其所有權,將對象保留住,防止直接被銷毀了;   (2)誰建立的對象,誰負責釋放;誰調用的對象,誰負責釋放。

Objective-C:保留計數器思想的詳解(對象的保留和所有權的釋放)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.