Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 为什么XCode静态分析器无法检测未发布的保留属性?_Iphone_Objective C_Ios_Xcode_Static Analysis - Fatal编程技术网

Iphone 为什么XCode静态分析器无法检测未发布的保留属性?

Iphone 为什么XCode静态分析器无法检测未发布的保留属性?,iphone,objective-c,ios,xcode,static-analysis,Iphone,Objective C,Ios,Xcode,Static Analysis,我已将该保留财产声明如下: @property (nonatomic, retain) NSMutableDictionary *codes; self.codes = [NSMutableDictionary dictionary]; 然后我综合这个: @synthesize codes; 我使用的属性如下: @property (nonatomic, retain) NSMutableDictionary *codes; self.codes = [NSMutableDictiona

我已将该保留财产声明如下:

@property (nonatomic, retain) NSMutableDictionary *codes;
self.codes = [NSMutableDictionary dictionary];
然后我综合这个:

@synthesize codes;
我使用的属性如下:

@property (nonatomic, retain) NSMutableDictionary *codes;
self.codes = [NSMutableDictionary dictionary];
然后,我忘了说
[code release]在my
dealloc

当我在XCode 4.3.2中运行Analyzer时,这并没有显示为问题。我的基本SDK是iOS 5.1,我的编译器是Apple LLVM编译器3.1


为什么analyzer没有检测到这一点?

如果您没有对配置进行任何更改,当您以ios5+为目标时,您将自动使用ARC(自动参考计数),而不需要您释放或保留

iOS 5中最具破坏性的变化是添加了自动 参考计数,简称ARC。ARC是新LLVM的一项功能 3.0编译器,它完全取消了所有iOS开发人员都讨厌的手动内存管理


这是iOS教程团队成员Matthijs Hollemans的一篇文章,他是一位经验丰富的iOS开发人员和设计师。

如果您没有更改任何配置,当您以ios5+为目标时,您将自动使用ARC(自动引用计数),而不需要您发布或保留

iOS 5中最具破坏性的变化是添加了自动 参考计数,简称ARC。ARC是新LLVM的一项功能 3.0编译器,它完全取消了所有iOS开发人员都讨厌的手动内存管理


这是iOS教程团队成员Matthijs Hollemans的一篇文章,他是一位经验丰富的iOS开发人员和设计师。

我想这是因为分析器无法可靠地检测跨方法/库边界的保留/发布问题

可以想象,您可以将
代码
数组的所有权传递给一些外部方法或库,这些方法或库稍后将为您发布它。这将是一种糟糕的做法,因为接收方法应该在需要时保留它,但我见过没有经验的开发人员做过这种事情

所以你可能会在课堂上的某个地方看到:

[SomeAPI takeThisArrayAndReleaseItLater:codes];
分析器无法知道您的类不再负责释放数组。尽管您没有遵循良好的内存管理实践,但给您一个警告是不正确的


分析仪非常擅长于仅在实际问题上发出警告。我认为我从未在betas构建之外看到过假阳性,这是一件好事。

我想这是因为分析器无法可靠地检测跨方法/库边界的保留/发布问题

可以想象,您可以将
代码
数组的所有权传递给一些外部方法或库,这些方法或库稍后将为您发布它。这将是一种糟糕的做法,因为接收方法应该在需要时保留它,但我见过没有经验的开发人员做过这种事情

所以你可能会在课堂上的某个地方看到:

[SomeAPI takeThisArrayAndReleaseItLater:codes];
分析器无法知道您的类不再负责释放数组。尽管您没有遵循良好的内存管理实践,但给您一个警告是不正确的



分析仪非常擅长于仅在实际问题上发出警告。我认为我从未在betas构建之外看到过假阳性,这是一件好事。

你在使用ARC吗?很可能是给你的。你为什么忘了?别这样。提示:将您的dealloc立即放在@synthetic下,当您使用copy或retain编写新道具时,只需将其添加到dealloc中即可。遵循此规则,您将永远不会遇到此问题。@EtileVed no,这是一个旧项目,没有任何配置更改为使用ARC。@AlexTerente我没有忘记,实际上,我正在查看其他人的代码,我看到了这一点。然后我想知道为什么这没有出现在分析仪上。谢谢:]你在用ARC吗?很可能是给你的。你为什么忘了?别这样。提示:将您的dealloc立即放在@synthetic下,当您使用copy或retain编写新道具时,只需将其添加到dealloc中即可。遵循此规则,您将永远不会遇到此问题。@EtileVed no,这是一个旧项目,没有任何配置更改为使用ARC。@AlexTerente我没有忘记,实际上,我正在查看其他人的代码,我看到了这一点。然后我想知道为什么这没有出现在分析仪上。感谢:]它不仅不要求您这样做,而且禁止您这样做。但是如果我在方法中alloc/init一个数组,然后不在那里释放它,那么分析器会显示一个问题。产生这种差异的原因是什么?当使用ARC时,分析仪不会对这类事情发出警告。很明显,OP没有使用ARC。@Borrden不,如果你愿意,你可以禁用ARC。@MikeWeller这个问题没有提到任何警告,所以它不是很清楚。顺便说一句,op是什么?它不仅不要求您这样做,而且禁止您这样做。但是,如果我在方法中alloc/init一个数组,然后不在那里释放它,那么分析器会显示一个问题。产生这种差异的原因是什么?当使用ARC时,分析仪不会对这类事情发出警告。很明显,OP没有使用ARC。@Borrden不,如果你愿意,你可以禁用ARC。@MikeWeller这个问题没有提到任何警告,所以它不是很清楚。顺便问一下,什么是op?