讓我們看看你的代碼不明白髮生了什麼什麼:
UITextField* txtField = [arr objectAtIndex i];
,使一個複製數組中的價值,並在NSMutableArray
值是引用,並存儲在一個變量值txtField
。由於txtField
被隱含地定義爲保留強引用,ARC將(根據任何優化)在引用(也稱爲「保留」)中註冊所有權權益。您的下一行:
txtField = nil;
存儲零參考值txtField
。由於txtField
擁有強有力的參考,任何商店都會導致ARC放棄存儲在變量中的以前參考值中的所有權利益(又名「發行版」)。
該數組從未改變。您已經遍歷其內容,複製每個值,保留該值,並釋放該值。最後你寫:
arr = nil;
它存儲零參考值在arr
。由於arr
擁有強大的參考價值,因此任何商店都會導致ARC放棄存儲在變量中的以前參考值中的所有權利益(又稱「發佈」),並且以前的值是您對NSMutableArray
的參考。如果數組中沒有其他所有者,則它將被銷燬,並且當數組被銷燬時,它將放棄它所包含的任何值的所有權 - 在這種情況下,這是您的UITextField
實例,並且如果沒有其他所有者,那麼它們是摧毀...
所以頂多你需要的是:
arr = nil
但你可能甚至不需要說。由於arr
在其生命週期結束時保留強引用 - 在包含其聲明的塊或方法結束時(如果是局部變量),或者實例在實例變量被銷燬時 - 那麼ARC將放棄其所有權利益等等。
HTH
來源
2013-07-16 03:11:46
CRD
好的。這就說得通了。 感謝您的幫助。 – user1087185