说我有:
NSDictionary *stuff; // {"1" => "hi", "2" => "bye"}
NSArray *array = [stuff allKeys];
allKeys创建了一个副本的东西密钥,因此数组现在负责发布这些信息。
稍后,当我想要
时我做不到:
array = [newStuff allKeys];
因为它只会重新分配指针并孤立原始数组。我必须先删除对象
[array removeAllObjects];
想知道我的理解是否正确?谢谢!
答案 0 :(得分:5)
不完全。
NSArray *array = [stuff allKeys];
这为您提供了一个您不拥有的数组。从技术上讲,它是否是副本不是你的问题。由于访问器不以单词“alloc”或“new”开头,或包含单词“copy”,因此您不拥有返回值,这意味着您不需要释放它。 (但如果你想保留它,你确实需要保留它。)
如果你以后这样做:
array = [newStuff allKeys];
没关系。正如你所知,它会踩踏原始引用,但由于你还没有拥有该引用,所以可以放手。当然,除非你保留它,否则这个新的参考文献也不属于你。
答案 1 :(得分:0)
没有。 allKeys
会返回自动释放的NSArray
。除非您明确retain
,否则它将在稍后发布。因此设置array = [newStuff allKeys];
非常好。您应该阅读this guide on Objective-C。