1

我有这样声明的保留属性:

@property (nonatomic, retain) NSMutableDictionary *codes;

然后我合成这个:

@synthesize codes;

我使用这样的属性:

self.codes = [NSMutableDictionary dictionary];

然后,我忘记[codes release];在我的dealloc.

当我在 XCode 4.3.2 中运行分析器时,这不会显示为问题。我的基础 SDK 是 iOS 5.1,我的编译器是 Apple LLVM 编译器 3.1

为什么分析仪不选择这个?

4

2 回答 2

1

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

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

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

[SomeAPI takeThisArrayAndReleaseItLater:codes];

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

该分析器非常擅长仅对实际问题发出警告。我认为我从未在 beta 版本之外看到过误报,这是一件好事。

于 2012-06-08T07:59:19.140 回答
0

如果您没有从配置中更改任何内容,那么无论何时您以 ios5+ 为目标,您都将自动使用不需要您释放或保留的 ARC(自动引用计数)。

iOS 5 中最具颠覆性的变化是增加了自动引用计数,简称 ARC。ARC 是新的 LLVM 3.0 编译器的一项功能,它完全消除了所有 iOS 开发人员都喜欢讨厌的手动内存管理。

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

于 2012-06-08T07:40:39.363 回答