我有这个保留的财产声明如下:
@property (nonatomic, retain) NSMutableDictionary *codes;
然后我这个合成:
@synthesize codes;
我使用该属性是这样的:
self.codes = [NSMutableDictionary dictionary];
然后,我忘了说[codes release];
在我dealloc
。
当我的XCode 4.3.2运行分析,这种不作为的问题。 我的基地SDK为iOS的5.1和我的编译器是苹果LLVM编译器3.1
为什么不挑分析器这件事?
我想这是因为分析仪不能可靠地检测保留/跨方法/图书馆界发行的问题。
你当然可以通过你的所有权codes
阵列一些外部方法或库将释放它以后给你。 这将是不好的做法,因为接收方法应该只保留它,如果它需要它,但我已经看到这种事情的经验的开发人员来完成。
所以,你可能在你的类的地方看到:
[SomeAPI takeThisArrayAndReleaseItLater:codes];
分析仪有没有办法知道你的类不再负责释放阵列。 为了给你一个警告是不正确的,尽管你没有关注良好的内存管理实践的事实。
该分析仪是唯一的真实问题的警告非常好。 我不认为我见过的测试版的假阳性外建立,这是一件好事。
如果你还没有从配置改变什么,whenver你的目标的iOS5 +会自动将您使用ARC(自动引用计数),这犯规需要你释放或保留。
在iOS 5中最具颠覆性的变化是增加了自动引用计数,或ARC短的。 ARC是新的LLVM编译器3.0的功能,它与手动内存管理,所有iOS开发又爱又恨彻底摒弃。
这是一个后通过的iOS教程团队成员Matthijs Hollemans,有经验的iOS开发者和设计师。