Расширение класса 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
У меня последний вопрос о соглашениях по кодированию: когда я должен поставить подчеркивание (_) перед именем переменной?
Спасибо