2015-10-25 5 views
1

Метод description - метод класса класса NSObject. Я думаю, что это метод класса, потому что NSObject не может быть инициализирован.Где именно происходит переопределение метода описания?

Когда я делаю это:

NSLog(@"%@", [NSObject description]); 

Он печатает:

NSObject 

Но когда я создаю класс, который непосредственно унаследован от NSObject, и сделать это:

MyNewClass *obj = [[MyNewClass alloc] init]; 
NSLog(@"%@", obj); 

Это выдает что-то вроде:

<MyNewClass: 0x4b234a0> 

Я не специально переопределял метод description, как он был преодолен моим новым классом?

+0

Попробуйте 'NSLog (@"% @ ", [описание MyNewClass]);' для сравнения яблок-к-яблокам :-) – dasblinkenlight

+0

@dasblinkenlight 'NSLog' автоматически вызывает метод описания, но вы правы, это может ввести в заблуждение. – hattenn

+0

Это так, но это совсем другое. – dasblinkenlight

ответ

1

Это потому, что NSObject имеет два метода:

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

Бывший определен в NSObject class, а затем один в в NSObject Protocol.

+0

Я проверял «NSObject Class Reference» в Mac Developer Library, а «описание» там не было, вот что меня смутило. По-видимому, это в «NSObject Protocol Reference». – hattenn

+0

Да, я так и думал. Рад, что я мог бы помочь прояснить! – Abhinav