記憶體管理說我們必須release使用創建的物件alloc。考慮這個典型的示例代碼。
XYZClass *obj = [[XYZClass alloc] init];
// use obj
[obj release];
但在這個例子中,obj可能不是從 回傳的物件alloc,正如 Apple 的檔案所說
注意:init 有可能回傳一個與 alloc 創建的物件不同的物件,因此最好的做法是如圖所示嵌套呼叫。
所以這個典型的例子似乎釋放了回傳的物件init,違反了記憶體管理規則,而不釋放回傳的物件alloc,進一步違反了規則。這個典型例子如何有效?
uj5u.com熱心網友回復:
首先,您的代碼使用手動記憶體管理,這是我不推薦的做法,因為 Xcode 4.2 適用于 OS X v10.6 和 v10.7(64 位應用程式)以及 iOS 4 和 iOS,我們支持自動參考計數(ARC) 是一種編譯器功能,可提供 Objective-C 物件的自動記憶體管理。請參閱過渡到 ARC 發行說明:
您不必記住何時使用保留、釋放和自動釋放,ARC 會評估物件的生命周期要求,并在編譯時自動為您插入適當的記憶體管理呼叫。編譯器還會為您生成適當的 dealloc 方法。
關于您的具體問題,init可能回傳不同物件的事實不會破壞記憶體管理,因為不同的物件將使用相同的分配。這對于初始化器可能回傳內部子類的類簇來說是很常見的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/537852.html
標籤:目标-c
