我看了幾個好文章的內存管理。據rypress
保留屬性:該保留屬性是手動保留的強勢發佈版本,它具有完全相同的效果:自稱賦值的所有權。您不應該在自動參考計數環境中使用它。
複製屬性:copy屬性是strong的替代方法。它不是取得現有對象的所有權,而是創建您分配給該屬性的任何副本,然後獲取該屬性的所有權。只有符合NSCopying協議的對象才能使用此屬性。
即使我也經歷了一些很好的stackoverflow鏈接。 Joshua Nozzi's answer對保留與複製給出了很好的解釋。
保留對複製 - 聲明的屬性默認情況下使用保留(這樣你就可以簡單地完全忽略它的),並會自動管理對象的引用計數另一個對象是否被分配給屬性或將它設置爲無;使用副本自動發送新分配的對象一個-copy消息(它將創建一個傳遞的對象的副本,並將該副本分配給該屬性 - 有用的(甚至是必需的)在某些情況下,分配的對象可能會被修改後設置爲某些其他對象的性質(這將意味着修飾/突變將適用於屬性爲好)
還找到很好的例子here
代碼:。
NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"First",@"Second", nil];
NSMutableArray *copiedArray = [array mutableCopy];
NSMutableArray *retainedArray = [array retain];
[retainedArray addObject:@"Retained Third"];
[copiedArray addObject:@"Copied Third"];
NSLog(@"array = %@",array);
NSLog(@"Retained Array = %@",retainedArray);
NSLog(@"Copied Array = %@",copiedArray);
輸出:
array = (
First,
Second,
"Retained Third"
)
2013-12-19 17:15:49.380 RetainVsCopy[2876:c07] Retained Array = (
First,
Second,
"Retained Third"
)
2013-12-19 17:15:49.381 RetainVsCopy[2876:c07] Copied Array = (
First,
Second,
"Copied Third"
)
請參見數組和保留數組都有相同的內容。這是因爲兩者都指向相同的內存/實例/對象。複製陣列的內容不同。這是因爲複製創建了一個單獨的實例。
檢查此答案:http:// stackoverflow。com/a/7855536/4831524 –
檢查此鏈接,http://stackoverflow.com/questions/2255861/property-and-retain-assign-copy-nonatomic-in-objective-c http://stackoverflow.com/a/15541801/4294543 –
@iamhx你給故事板中的標識符? –