アプリケーションのいくつかの場所でシングルトンパターンを使用しています。コードを解析するときにメモリリークエラーが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
私はシングルトンのコードがうまくされていることをかなり確信している - すべての後に、それがここで参照同じコードですAppleのドキュメンテーションと同様にスタックオーバーフローが発生しますが、メモリリーク警告を整理して、スキャンビルドが成功を返すようにしたいと考えています。
実際には、 '-init'メソッドはstatic _sharedMyClass変数を設定します。これは問題ありません。参照してください:http://stackoverflow.com/questions/145154/what-does-your-objective-c-singleton-look-like/145221#145221 – pix0r
私は推測するには、 self alloc] returnは実際にはselfパラメータを設定しています。これはinitメソッドによって保存されます。したがって、それはちょうど失われたと思う(私がしたように、より多くの文脈なしに)。 –
LOL、あなたは正しいです。ありがとう。 – pix0r