'NSObject'没有Visible @接口,声明选择器'alloc'

时间:2014-03-17 17:57:02

标签: objective-c

我试图创建一个单身人士。这组代码用于建立settingsMAnager单例。

我试图分配它但继续抛出错误

它抛出错误没有与NSObject可见的@接口。 声明选择器' alloc'

有人能看出错误吗?

提前致谢!

//In my .h file I have

    +(settingsManager*)getInstance;
    -(void)printSettings;


//In My .m file is----

    static settingsManager *theInstance = nil;

//Instance Method
    +(settingsManager*)getInstance
    {


         (theInstance == nil)

        {
            [[self alloc] init];//Im getting "expression result unused" here
        }

    return theInstance;

    }

    -(id)alloc

    {
        theInstance = [super alloc];<------//getting the big error here 


    return theInstance;

    }

    -(id)init
    {

    if (self = [super init])

         {

    }
    return  self;


}
(void)printSettings                                                                                                                                                                                   


{



    NSLog(@"Hello");




}

2 个答案:

答案 0 :(得分:3)

您永远不应该继承alloc方法。下面是使用单例的代码:

+ (instancetype)sharedInstance {

    static SettingsManager *sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[settingsManager alloc] init];
    });
    return sharedInstance;
}

如果你对更多阅读感兴趣,我建议你this link

我还建议您阅读有关objective-c的推荐coding guidelines



instancetype

instancetype是一个上下文关键字,可用作结果类型,表示方法返回相关的结果类型。与id不同,instancetype只能用作方法声明中的结果类型。更多详情here

dispatch_once

正如here所述,dispatch_once()是同步的,只允许你执行一段代码。

答案 1 :(得分:0)

这不是right way to implement a singleton。您的实现中有许多单一且有潜在风险的位。但是,这个错误来自alloc是类方法的事实,而不是您在此处编写的实例方法。