【发布时间】:2011-11-17 04:20:39
【问题描述】:
我刚刚分析了我的 iPhone 项目,对 XCode(4) 给出的结果感到非常困惑。例如,在我的一个视图控制器中,我有以下代码:
@property (nonatomic, retain) NSArray* menuItems;
@property (nonatomic, retain) NSArray* menuItemsOptions;
- (void)viewDidLoad
{
[super viewDidLoad];
self.menuItems = [[NSArray alloc] initWithObjects:
NSLocalizedString(@"Foo", nil),
NSLocalizedString(@"Bar", nil),
nil];
[self.menuItems release];
self.menuItemsOptions = [[NSArray alloc] initWithObjects:
NSLocalizedString(@"More foo", nil),
NSLocalizedString(@"more bar", nil),
nil];
[self.menuItemsOptions release];
...
}
menuItems 和 menuItemsOptions 是带有 retain 选项的属性。如果我按下分析,XCode 将显示[self.menuItems release]; 行的错误:
http://i54.tinypic.com/2rqkfaf.png
让我更加困惑的是,XCode 不会显示 [self.menuItemsOptions release]; 行的错误
另一种方法的类似情况:
http://i55.tinypic.com/10hof9c.png
theSelectedBegin 和 theSelectedEnd 又是带有保留选项的属性。
我发布此内容的原因是我的应用程序实际上会在第三方库中以非常神秘/无法理解的回溯崩溃,除非我添加了最后一张图片中看到的 copy 但不要 em> 添加release。添加release或省略copy会使应用程序再次崩溃,这就是我决定运行分析器的原因。
我做错了什么?
【问题讨论】:
-
您可以在定义属性的地方发布标题代码吗?
-
假设属性声明/实现是正确的,这听起来像其他事情很不对劲。请记住,分析器有时可能会出错。
-
顺便说一下,如果属性是(意外地?)
copy,分析器结果将是有意义的。 -
没有看到您的属性定义或更多代码,我无法给出一个好的答案。您上面的代码看起来不错。
标签: xcode cocoa-touch memory-management retaincount