我应该发布通过@{}实例化的NSDictionary吗?

5

I have the following code:

NSDictionary *dict = @{ @"myKey" : @"myValue" };  

我应该使用release还是autorelease来释放dict? 或者说我不拥有这个对象,所以我不应该自己释放它吗?
注意:我使用手动引用计数(禁用 ARC)。

规则非常简单,只有在保留或分配/新建/复制时才进行释放。 - Bryan Chen
在 [高级内存管理编程指南](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html#//apple_ref/doc/uid/TP40004447-SW12 Collections Own the Objects They Contain) 中有更详细的解释。 - Danyun Liu
3个回答

13
不,您不能发布使用字面语法创建的NSDictionaryClang文档指出,字典文字表达式扩展为+[NSDictionary dictionaryWithObjects:forKeys:count:],因此您不拥有该对象。
没有Objective-C文字将扩展为创建拥有引用的表达式。

对我来说最好的答案,因为提供了官方文档链接。谢谢! - Dj S

3
即使您已禁用ARC(应该启用它),也不需要释放它,因为您不拥有该对象。只有通过allocnew创建的对象才归您所有。

我在我的问题中加了一条注释表示ARC(已禁用)。谢谢你的快速回答! - Dj S

1

我问问题太早了,抱歉。但这是答案:

由于找不到参考资料(也许是因为模糊的关键字@ { } ),所以我试图自己分析它。

当在由@{ @"myKey" : @"myValue" }创建的字典中添加 autorelease 时,应用程序会崩溃。 我还通过Xcode的静态分析器运行了代码,并出现Memory问题。
因此,我们不需要释放使用@{}检索的对象,类似于使用@""NSString

我还尝试了使用@[]NSArray。 应用同样的行为适用。
我们不需要自己释放它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接