2016-02-06 18 views
0

我对编程知道的一切都表示,实例方法可以调用类方法,但类方法不能调用实例方法成功称为实例方法的类方法

这个帖子同意... 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

,一个类方法不能调用实例方法意味着该类方法不能调用上self实例方法因为self表示类,而不是类的一个实例的说明。

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

觉得这个例子:

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

这个例子中没有比你sharedInstance方法的问题不同。在对象的特定实例上调用实例方法是很好的,即使您恰好处于某种类的方法中。

+0

如果你看看你的例子(我们可以在NSObject的任何子类上看到),你会发现你并没有在self上调用init,而是根据[self alloc]的结果 - 这是一个实例。最佳 – Jef

+0

@Jef你应该发表你的评论问题,而不是这个答案。 – rmaddy