NSArray是否复制对象?

Jon*_*ing 15 memory-management objective-c nsarray

当我NSArray使用+时[NSArray arrayWithObjects:],它会复制这些对象吗?如果我在将对象添加到数组后释放它们,我会遇到问题吗?

Jim*_*uls 35

不,它不会复制它们.它保留了它们.是的,您可以在将对象添加到阵列后安全地释放它们.

一如既往,文档非常清楚地说明了这一点:

数组保持对其内容的强引用 - 在托管内存环境中,每个对象在将其id添加到数组之前接收保留消息,并在从数组中删除数据或者释放数组时接收释放消息.如果您想要具有不同对象所有权语义的集合,请考虑使用CFArray Reference,NSPointerArray或NSHashTable.

  • 很好的答案.还要记住+ arrayWithObjects:返回一个无主("自动释放")数组,因此你必须保留它以避免丢失它,但是数组中的对象将与数组一样长. (2认同)