Как довольно новый программист objective-c (с опытом работы в течение 4 лет), похоже, мне сложно понять, когда использовать расширения класса. Из того, что я понял (и, пожалуйста, исправьте меня, если я ошибаюсь), основное различие между категориями и расширениями состоит в том, что расширение предполагает, что вы реализуете методы внутри своей основной реализации, тогда как с категорией это может быть в другой реализации, Также кажется, что люди используют расширения, главным образом, для частных методов.
Вот мой первый вопрос. Какая разница между использованием расширения класса для объявления частного метода, а не объявлением его вообще (он, похоже, скомпилирован в обоих случаях)? (пример 1 против 2)
Пример 1
@interface Class()
-(void) bar;
@end
@implementation Class
-(void) foo {
[self bar];
}
-(void) bar {
NSLog(@"bar");
}
@end
Пример 2
@implementation Class
-(void) foo {
[self bar];
}
-(void) bar {
NSLog(@"bar");
}
@end
Второй вопрос: Какая разница между объявлением иваров внутри расширения и объявлением его непосредственно внутри реализации? (Пример 3 против 4)
Пример 3
@interface Class() {
NSArray *mySortedArray;
}
@end
@implementation Class
@end
Пример 4
@implementation Class
NSArray *mySortedArray;
@end
У меня есть последний вопрос о соглашениях о кодировании: когда я должен поставить знак подчеркивания (_) перед именем переменной?
Спасибо