Почему мне разрешено писать и использовать методы в реализации, которые не объявлены в заголовочном файле в Objective-C? - PullRequest
3 голосов
/ 10 апреля 2010
@interface SomeClass : NSObject
{
}
@end

@implementation SomeClass
-(void) awesomeMethod600
{
}
@end

Нет ошибки, и awesomeMethod600 работает.

Ответы [ 2 ]

7 голосов
/ 10 апреля 2010

Объявления методов в интерфейсах классов предназначены для компилятора (для подавления предупреждений), поскольку поиск метода в Objective-C выполняется во время выполнения, а не во время компиляции.

0 голосов
/ 17 апреля 2010

Perspx прав.

Попробуйте построить это в XCode:

@implementation SomeClass
-(void)awesomeMethod {
    [self notAwesomeMethod];
}    

-(void)notAwesomeMethod {}
@end

Вы должны увидеть предупреждение о том, что SomeClass может не отвечать на '-notAwesomeMethod' . Попробуйте инвертировать порядок определений методов ... без ошибок, поскольку notAwesomeMethod уже определено, и, следовательно, компилятор знает об этом. Интерфейсы класса делают это заранее.

Это также хорошее поведение, потому что вы можете выбрать только публичный интерфейс класса public и оставить все внутренние закрытые методы вне файла .h.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...