需要NSArray的内存管理澄清

amb*_*tch 0 objective-c

说我有:

NSDictionary *stuff; // {"1" => "hi", "2" => "bye"}
NSArray *array = [stuff allKeys];
Run Code Online (Sandbox Code Playgroud)

allKeys 复制了东西的密钥,因此数组现在负责发布这些信息.

后来,我什么时候想

我不能做:

array = [newStuff allKeys];
Run Code Online (Sandbox Code Playgroud)

因为它只会重新分配指针并孤立原始数组.我必须先删除对象

[array removeAllObjects];
Run Code Online (Sandbox Code Playgroud)

想知道我的理解是否正确?谢谢!

Ben*_*tto 5

不完全的.

NSArray *array = [stuff allKeys];
Run Code Online (Sandbox Code Playgroud)

这为您提供了一个您不拥有的数组.从技术上讲,它是否是副本不是你的问题.由于访问器不以单词"alloc"或"new"开头,或包含单词"copy",因此您不拥有返回值,这意味着您不需要释放它.(但如果你想保留它,你需要保留它.)

如果你以后这样做:

array = [newStuff allKeys];
Run Code Online (Sandbox Code Playgroud)

没关系.正如你所知,它会踩踏原始引用,但由于你还没有拥有该引用,所以可以放手.当然,除非您保留,否则这个新参考也不属于您.