【发布时间】:2011-02-18 18:07:57
【问题描述】:
使用包含静态分析器的最新版本的 XCode,我的一些对象正在抛出报告分析器问题。具体来说,我有一个拥有自己并负责释放自己的对象,但也应该返回给调用者并可能手动保留在那里。
如果我有一个像+ (Foo) newFoo 这样的方法,分析器会看到New 这个词并在调用者中报告一个问题,说newFoo 预计会返回一个带有retain +1 的对象,并且它不会在任何地方发布。如果我将其命名为 + (Foo) getFoo,分析器会报告该方法中的一个问题,说存在潜在的泄漏,因为它在返回之前没有被释放。
我的班级基本上是这样的:
+ (Foo *) newFoo {
Foo *myFoo = [[[Foo new] retain] autorelease];
[myFoo performSelectorInBackground:@selector(bar) withObject:nil];
return myFoo;
}
- (void) bar {
//Do something that might take awhile
[self release];
}
对象拥有自己,完成后会释放自己,但没有存储它的地方,因此静态分析器将其视为某处的泄漏。是否有一些命名或编码约定可以提供帮助?
【问题讨论】:
-
在 newFoo 中它真的返回 foo 而不是 myFoo 吗?
标签: objective-c cocoa-touch xcode