簡體   English   中英

什么時候以及為什么我必須使用發布版?

[英]When and why do i have to use release?

我通過觀看教程和嘗試來學習了Objective-c和xcode,所以我一個人學習。 我從來沒有真正與老師或類似的人上過真正的課。 而且我從不了解release的用途。 當然,我經常看到它,但是我想了解一些有關它的信息。 我必須對在頭文件in - (void)dealloc聲明的每個對象都使用release嗎? 如果我在IBAction中創建了一個臨時NSString,是否必須在操作結束時將其釋放? 如果我不使用發布會怎樣? 版本在編程語言中真正意味着什么?

規則很簡單:如果使用newallocretaincopy (簡稱NARC)獲得對象,則只需釋放該對象。 而已。 一旦完成NARC對象的使用並且不再需要它,則必須release它。 如果通過任何其他方式獲得了對象,則不得release它。

如果NARC在類初始化的某個位置獲得了一個對象,並且需要在類實例的生存期內保留該對象,請在dealloc方法中release它。 這將確保對象生存所需的時間,並在類實例死亡后死亡。

在Objective-C中,每個實例都包含一個引用計數屬性。 當您使用NARC創建對象時,該引用計數為1。每個連續的retain將使引用計數增加1。每個連續的release將使參考計數減少1。當引用計數達到0時,將釋放該對象。

因此,如果不釋放NARC對象,則將發生內存泄漏(因為引用計數將保持在0以上,並且即使完成操作,該對象也永遠不會被釋放)。 這意味着您的應用程序將在其內存中擁有一個永遠不會使用的空間。 如果這些加起來,那么您將浪費大量寶貴的系統資源。 在iOS上,這可能會殺死您的應用。

如果需要返回使用NARC創建的對象,則應autorelease它。 這基本上意味着“對象將release呼吁它只是晚一點”。 因此,如果調用您的方法的方法需要保留您要返回的該對象,則可以retain它,現在該對象的引用計數設置為release將按計划稍后再調用,但是該對象已retain ed,其引用計數將變為1,並且不會消失。 現在,調用者有責任在完成處理后對其release

閱讀Objective-C中內存管理的基本概念(分配,引用計數,保留/釋放/自動釋放...),可能會使您受益。

蘋果在這里提供了很好的介紹。

這個主題很容易使新手和有經驗的程序員感到困惑,並且通過對它的深入了解,您將對自己有很大的幫助。

這實際上不是10行就能解釋的東西。 但是,開始閱讀以上文檔后,您將可以更好地了解Cocoa中的內存管理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM