为什么不能Xcode的静态分析仪检测未公布保留的属性?(Why cannot XCode stati

2019-10-16 20:02发布

我有这个保留的财产声明如下:

@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

为什么不挑分析器这件事?

Answer 1:

我想这是因为分析仪不能可靠地检测保留/跨方法/图书馆界发行的问题。

你当然可以通过你的所有权codes阵列一些外部方法或库将释放它以后给你。 这将是不好的做法,因为接收方法应该只保留它,如果它需要它,但我已经看到这种事情的经验的开发人员来完成。

所以,你可能在你的类的地方看到:

[SomeAPI takeThisArrayAndReleaseItLater:codes];

分析仪有没有办法知道你的类不再负责释放阵列。 为了给你一个警告是不正确的,尽管你没有关注良好的内存管理实践的事实。

该分析仪是唯一的真实问题的警告非常好。 我不认为我见过的测试版的假阳性外建立,这是一件好事。



Answer 2:

如果你还没有从配置改变什么,whenver你的目标的iOS5 +会自动将您使用ARC(自动引用计数),这犯规需要你释放或保留。

在iOS 5中最具颠覆性的变化是增加了自动引用计数,或ARC短的。 ARC是新的LLVM编译器3.0的功能,它与手动内存管理,所有iOS开发又爱又恨彻底摒弃。

这是一个后通过的iOS教程团队成员Matthijs Hollemans,有经验的iOS开发者和设计师。



文章来源: Why cannot XCode static analyzer detect un-released retained properties?