2016-02-06 4 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 вы вызываете метод экземпляра, но он вызывается в конкретном экземпляре класса. Хорошо.

Think этого примера:

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

Этот пример не отличается от вашего sharedInstance метода вопрос. Это нормально, чтобы вызвать методы экземпляра в конкретном экземпляре объекта, даже если вы оказались в некотором классе.

+0

Если вы посмотрите на свой пример (который мы можем увидеть в любом подклассе NSObject), вы увидите, что вы не вызываете init на себе, а на результат [self alloc], который является экземпляром. Best – Jef

+0

@Jef Вы должны высказать свой вопрос на вопрос, а не этот ответ. – rmaddy

Смежные вопросы