1

CWLSynthesizeSingleton.hを使用してシングルトンを作成しています。しかし、Xcode でソース コードを分析すると、次のエラーが表示されます。

Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected

この行で

CWL_SYNTHESIZE_SINGLETON_FOR_CLASS_WITH_ACCESSOR(MyManager, sharedManager)

このプロジェクトでは ARC を使用しません。それを修正する方法はありますか?それを無視するだけでいいのでしょうか?

4

1 に答える 1

0

簡単な答え: そのコードは使用しないでください。古いコードであり、推奨されていません。最近のシングルトンを作成する正しい方法は、次を使用することdispatch_onceです。

+ (instancetype)sharedInstance
{
    static dispatch_once_t once;
    static id sharedInstance;
    dispatch_once(&once, ^{
        sharedInstance = [(id)[super alloc] init];
    });
    return sharedInstance;
}

クラスのユーザーがインスタンスを直接割り当てるのを防ぎたい場合は、unavailable呼び出したくないメソッドのヘッダーで compiler 属性を使用します。

+ (instancetype)alloc __attribute__((unavailable("alloc not available, call sharedInstance instead")));
- (instancetype)init __attribute__((unavailable("init not available, call sharedInstance instead")));
+ (instancetype)new __attribute__((unavailable("new not available, call sharedInstance instead")));
于 2013-11-06T22:27:51.120 に答える