我有以下代码:
NSDictionary *dict = @{ @"myKey" : @"myValue" };
我应该用release
还是autorelease
来释放dict
?
或者我不拥有这个对象,所以我不应该自己释放它?
注意:我使用手动引用计数(ARC是禁用的)
不可以,不能释放用文字语法创建的NSDictionary
。Clang文档告诉我们字典字面表达式扩展为+[NSDictionary dictionaryWithObjects:forKeys:count:]
,因此您不拥有该对象。
任何Objective-C文字都不能展开为创建一个所属引用的表达式。
即使您禁用了ARC(您应该启用它),您也不需要释放它,因为您不拥有该对象。只有当您通过alloc
或new
创建对象时,您才拥有该对象。
我问得太早了,对不起。但答案是:
我试着自己分析它,因为我找不到引用(可能是因为模糊的关键字@{}
)。
当将autorelease
添加到@{ @"myKey" : @"myValue" }
创建的字典中时,应用程序崩溃。我还通过Xcode的静态分析器运行了代码,它给出了一个内存问题。因此,我们不需要释放使用@{}
检索的对象,类似于@""
中的NSString
。
我也尝试了NSArray
使用@[]
。同样的行为也适用。
我们不需要自己释放它们。