类方法成功调用实例方法

时间:2016-02-06 22:16:43

标签: objective-c singleton instance-variables

我所知道的关于编程的一切都说实例方法可以调用类方法,但类方法不能调用实例方法。

这篇文章同意...... Call instance method from class method

然而奇迹般地,类方法sharedInstance设法调用实例方法init。我错过了什么?

static iRpDatabase *sharedDatabase;

@implementation iRpDatabase
{ 
}

    +(iRpDatabase*)sharedInstance
    {
        if(sharedDatabase == nil)
        {
            sharedDatabase = [[self alloc] init];
        }
        return sharedDatabase;
    }

    // this is an instance method, called from class method above.
    -(id)init
    {
        if (self = [super init]) {
            someInstanceVariable = XYZ;
            [self someInstanceMethod];
        }
        return self;
    }

1 个答案:

答案 0 :(得分:1)

类方法无法调用实例方法的语句意味着类方法无法调用self上的实例方法,因为self表示类,而不是类的实例。 / p>

sharedInstance方法中,您正在调用实例方法,但它是在类的特定实例上调用的。没关系。

想想这个例子:

+ (void)someClassMethodOfiRpDatabase {
    NSString *str = @"Hello";
    NSInteger len = [str length]; // look - I called an instance method
}

此示例与您的sharedInstance方法问题没有什么不同。在对象的特定实例上调用实例方法是很好的,即使您碰巧在某个类方法中也是如此。