我使用的代碼片段像ARC是否支持myiVar = nil?
if ([Array count] != 0) {
Array = nil;
}
Array = [[NSMutableArray alloc]init];
這是使用ARC時允許嗎?這是否會導致任何類型的崩潰?爲什麼我這樣做是每次當我的方法被調用Array
獲得一組新的數據。我在我班的許多地方都使用這種片段。
我使用的代碼片段像ARC是否支持myiVar = nil?
if ([Array count] != 0) {
Array = nil;
}
Array = [[NSMutableArray alloc]init];
這是使用ARC時允許嗎?這是否會導致任何類型的崩潰?爲什麼我這樣做是每次當我的方法被調用Array
獲得一組新的數據。我在我班的許多地方都使用這種片段。
最佳解決方案:親自測試一下!這是一個非常簡短的例子!
但是,是的,這當然是有效的! ARC表示自動引用計數。它只是說你不必在乎release
,retain
等等。
如果你想要一個對象爲零,你仍然可以,因爲它是一個簡單的指針分配!
而關於你的代碼,你可以在重新指派它之前將數組設置爲零!
嘗試讓你的代碼的邏輯:
如果我陣列具有對象
Then Array point to a new nil object
但在所有情況下,你做的事:
我的數組點一個新的NSMutableArray對象
因此,無論您的條件是否被評估爲true,您的代碼都是無用的,因爲這個變量會在之後取得另一個值!
這比我的回答快得多:) – jrturton
您顯示的示例代碼是有效的。這裏有幾個變體:
if ([Array count] != 0) {
Array = [[NSMutableArray alloc] init];
}
實施例2:
if ([Array count] != 0) {
Array = [NSMutableArray array]; //value will be retained
}
實施例3:
if ([Array count] != 0) {
self.Array = [[NSMutableArray alloc] init]; //Will NOT leak under ARC.
}
實施例4:
//if ([Array count] != 0) {
[Array removeAllObjects];
//}
所有四個例子是下ARC有效。
另一件事:實例變量通常首字母小寫,但仍然遵循CamelCase方法。另一種方法是在變量名稱前加一個下劃線:如果您沒有@synthesize
方法來匹配@property
值,則完成此操作。
簡單的建議你的編碼風格(和挑剔挑剔)。在ObjC開發人員社區似乎有一個協議,變量名稱以小寫字母開頭,類名以大寫字母開頭。在變量名中使用大寫的第一個字母會使其他開發人員更難以閱讀您的代碼。 –
在將數組分配給新的NSMutableArray之前,您甚至不需要將該數組設置爲nil。當一個變量被賦值時,它的舊值在它獲得新值之前被釋放。 –