Ich benutze das Singleton-Muster an mehreren Stellen in einer Anwendung, und ich bekomme Speicherverlust Fehler von clang
bei der Analyse des Codes.Objective-C Singletons und LLVM/clang leak warnings
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)
Ich verwende diese Einstellungen für scan-build
:
scan-build -v -v -v -V -k xcodebuild
Ich bin ziemlich sicher, dass der Code in der Singleton ganz gut ist - immerhin ist es der gleiche Code hier verwiesen Stack Overflow sowie in der Dokumentation von Apple - aber ich würde gerne die Speicherleck-Warnung aussortieren, damit mein Scan-Build erfolgreich ist.
Eigentlich die '-init' Methode setzt die statische Variable _sharedMyClass, also ist das in Ordnung. Siehe: http://stackoverflow.com/questions/145154/what-does-your-objective-c-singleton-look-like/145221#145221 – pix0r
Dann würde ich vermuten, dass CLANG nicht schlau genug ist zu folgern, dass die [ Self-Alloc] return setzt den Self-Parameter, der von der init-Methode gespeichert wird. Es denkt also, es ist einfach verloren (wie ich es getan habe, ohne mehr Kontext). –
LOL, du hast Recht. Vielen Dank. – pix0r