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在你的头文件中为那些你不想调用的方法使用编译器属性:

+ (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 回答