我在應用程序的幾個地方使用單例模式,並且在分析代碼時從clang
得到內存泄漏錯誤。Objective-C Singletons和LLVM/clang泄漏警告
static MyClass *_sharedMyClass;
+ (MyClass *)sharedMyClass {
@synchronized(self) {
if (_sharedMyClass == nil)
[[self alloc] init];
}
return _sharedMyClass;
}
// clang error: Object allocated on line 5 is no longer referenced after this point and has a retain count of +1 (object leaked)
我使用這些設置爲scan-build
:
scan-build -v -v -v -V -k xcodebuild
我相當肯定的是,在單代碼就好了 - 畢竟,這是在這裏提到的相同的代碼堆棧溢出以及蘋果的文檔 - 但我想獲得內存泄漏警告整理出來,所以我的掃描構建返回成功。
其實`-init`方法設置靜態_sharedMyClass變量,所以這很好。請參閱:http://stackoverflow.com/questions/145154/what-does-your-objective-c-singleton-look-like/145221#145221 – pix0r 2009-05-06 16:24:08
然後,我會猜測CLANG不夠聰明,推斷[ self alloc] return實際上是設置自身參數,它將由init方法保存。因此它認爲它只是丟失了(就像我做的那樣,沒有更多的上下文)。 – 2009-05-06 16:26:39
大聲笑,你是對的。謝謝。 – pix0r 2009-05-06 18:10:30