我将此保留属性声明为:
@property (nonatomic, retain) NSMutableDictionary *codes;
然后我合成了这个:
@synthesize codes;
我使用这样的属性:
self.codes = [NSMutableDictionary dictionary];
然后,我忘了在[codes release];
中说dealloc
。
当我在XCode 4.3.2中运行Analyzer时,这不会显示为问题。我的基础SDK是iOS 5.1,我的编译器是Apple LLVM编译器3.1
为什么分析仪没有选择它?
答案 0 :(得分:1)
我想这是因为分析器无法可靠地检测跨方法/库边界的保留/释放问题。
您可以想象将您的codes
数组的所有权传递给某些外部方法或库,以便稍后为您发布。这将是不好的做法,因为接收方法应该只在需要时保留它,但我已经看到这种事情由没有经验的开发人员完成。
所以你可能会在你的课堂上看到这个:
[SomeAPI takeThisArrayAndReleaseItLater:codes];
分析器无法知道您的类不再负责释放阵列。尽管您没有遵循良好的内存管理实践,但是为了给您发出警告是不正确的。
分析仪非常善于警告实际问题。我不认为我曾经在贝塔建筑物外面看到过假阳性,这是一件好事。
答案 1 :(得分:0)
如果您没有更改配置中的任何内容,当您定位ios5 +时,您将自动使用ARC(自动引用计数),这不需要您释放或保留。
iOS 5中最具破坏性的变化是增加了自动功能 引用计数,简称ARC。 ARC是新LLVM的一个特性 3.0编译器,它完全取消了所有iOS开发人员都喜欢讨厌的手动内存管理。
这是iOS Tutorial团队成员Matthijs Hollemans的帖子,他是一位经验丰富的iOS开发人员和设计师。