在使用 Automatic Reference Counting (ARC) 管理記憶體的 iOS 專案中,開發者常會遇到一個疑問:如果對一個已經分配過的物件再次呼叫 [[MyClass alloc] init],會不會導致記憶體洩漏?還是 ARC 會自動處理釋放與重新分配?
在 ARC 環境下,直接對同一個變數重複賦值 [[MyClass alloc] init] 不會發生記憶體洩漏。ARC 會在賦值前自動釋放舊物件的持有權,再持有新物件。因此,以下寫法完全安全:
myObject = [[MyClass alloc] init];
雖然上述寫法沒問題,但為了程式碼可讀性與明確語意,建議在重新分配前將變數設為 nil,雖然這在 ARC 下非強制:
myObject = nil;
myObject = [[MyClass alloc] init];
這樣能清楚表達「捨棄舊物件、建立新物件」的意圖,也方便除錯時觀察變數狀態。
ARC 已妥善處理記憶體管理細節,開發者無需手動 release。直接重新賦值即可,若追求程式碼自文檔化,可先設為 nil 再建立新實例。