2015-08-22 3 views
0

В файле заголовка NSObject.h, я видел это методобъяснить, как метод описания работы в классе NSObject

+ (NSString *)description; 

Я знал, что знак «+» перед метод показывает, что это метод класса

Вот вся моя программа

#import <Foundation/Foundation.h> 

@interface A : NSObject 
@end 

@implementation A 
@end 

int main(int argc, const char * argv[]) 
{ 
    @autoreleasepool { 

    A * aObj = [A new]; 
    NSLog(@"%@",[A description]);//o/p: A 
    NSLog(@"%@",[aObj description]);//o/p: <A: 0x10010f5a0> 
    } 
    return 0; 
} 

Я использовал метод описания как с классом, а с его экземпляр и я получил о/р, а также. почему я не получил ни одной ошибки или предупреждения при использовании метода класса с помощью экземпляра, особенно в этом случае

[aObj description];//why this piece of code is working fine 

Спасибо заранее

ответ

4

Поскольку NSObject имеет два метода:

+ (NSString *)description; // Class method 
- (NSString *)description; // Instance method 

Так когда вы делаете [A description], вы вызываете метод класса (объявленный в NSObject Class), когда вы делаете [aObj description], вы вызываете метод экземпляра (объявленный в NSObject Protocol).

+0

технически, это тот же метод. Метакласс также наследуется от 'NSObject'. – Sulthan

+0

Согласен, но давайте останемся просто и просто притворимся, что есть два метода. По заданному вопросу, боюсь, было бы неплохо глубже проникнуть в детали метаклассов. Вот почему я предпочел бы остаться с двумя декларациями, достаточно самопонимая, чтобы ответить нашему другу. – Zaphod

+1

Я не согласен, что было бы неплохо «слишком глубоко». Сунил - не единственный человек, который собирается прочитать вопрос или его ответы. – nhgrif

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