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