关于objective c:’NSObject’没有Visible @接口,声明选择器’alloc’

No Visible @ interface fro 'NSObject', declares the selector 'alloc'

我正在尝试创建一个单例。这组代码旨在建立一个settingsManager单例。

我试图分配它,但不断地抛出一个错误

它引发错误:nsObject没有可见的@interface。声明选择器"alloc"

有人知道怎么了吗?

事先谢谢!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//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");




}


您不应该对alloc方法进行子类化。下面是使用singleton的代码:

1
2
3
4
5
6
7
8
9
+ (instancetype)sharedInstance {

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

如果你对更多的阅读感兴趣,我建议你使用这个链接。

我还建议您阅读Objective-C的推荐编码指南。

< BR>

实例化

InstanceType是一个上下文关键字,可以用作结果类型,以指示方法返回相关的结果类型。与ID不同,InstanceType只能用作方法声明中的结果类型。更多详细信息。

调度一次

正如这里所解释的,dispatch_Once()是同步的,允许您只执行一段代码。


这不是实现单例的正确方法。在您的实现中有许多单一的和潜在的风险位。但是,这个错误是因为alloc是一个类方法,而不是您在这里编写的实例方法。