Objective-C и другие языки включают в себя инструменты метапрограммирования, которые позволяют вам динамически определять методы, чтобы вы могли объявить конкретный метод и задать что-то еще во время выполнения, вы можете увидеть классический пример этой функции по этому вопросу о как реализовать method_missing как функциональность в Objective-C .
Что касается другой стороны, имея методы, реализованные, но не объявленные, то нет определенного способа определить приватные методы в Objective-C, и время от времени вы хотите определять методы, которые известны только вашим собственные занятия и не для всех остальных. Таким образом, вы не объявляете метод в своем файле .h , но, тем не менее, реализуете его в своем файле .m .
Компилятор обычно будет жаловаться, что вы используете неопределенный метод, но вы можете либо проигнорировать это, либо объявить эти закрытые методы в вашем файле .m как особую категорию, это будет выглядеть так:
@interface YourClass (PrivateMethods)
- (void) somePrivateMethod;
@end
@implementation YourClass
- (void) somePrivateMethod { NSLog(@"Something!"); }
@end
Обычные шаблоны, такие как Proxies (локальные или удаленные), обычно полагаются на доступность этих инструментов метапрограммирования, и они довольно распространены в таких языках, как Java, Ruby, Python и Objective-C.