Как довольно новый программист на Objective-C (с 4-летним опытом работы с Java), мне, кажется, трудно понять, когда использовать расширения классов. Из того, что я понял (и, пожалуйста, поправьте меня, если я ошибаюсь), основное различие между категориями и расширениями заключается в том, что расширение ожидает, что вы реализуете методы внутри вашей основной реализации, тогда как с категорией это может быть другая реализация. . Также кажется, что люди используют расширения в основном для частных методов.
Вот мой первый вопрос. В чем разница между использованием расширения класса для объявления частного метода и его отсутствием вообще (в обоих случаях кажется, что он компилируется при запуске)? (пример 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
Второй вопрос: в чем разница между объявлением ivars внутри расширения и объявлением его непосредственно внутри реализации? (Пример 3 против 4)
Пример 3
@interface Class() {
NSArray *mySortedArray;
}
@end
@implementation Class
@end
Пример 4
@implementation Class
NSArray *mySortedArray;
@end
У меня есть последний вопрос о правилах кодирования: когда мне следует ставить подчеркивание (_) перед именем переменной?
Спасибо