我应该释放一个通过@{}实例化的NSDictionary吗?



我有以下代码:

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

我应该用release还是autorelease来释放dict ?
或者我不拥有这个对象,所以我不应该自己释放它?

注意:我使用手动引用计数(ARC是禁用的)

不可以,不能释放用文字语法创建的NSDictionary。Clang文档告诉我们字典字面表达式扩展为+[NSDictionary dictionaryWithObjects:forKeys:count:],因此您不拥有该对象。

任何Objective-C文字都不能展开为创建一个所属引用的表达式。

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

我问得太早了,对不起。但答案是:

我试着自己分析它,因为我找不到引用(可能是因为模糊的关键字@{})。

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

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

最新更新