Extensão de classe Objective-C
Como um programador objetivo-c razoavelmente novo (com uma experiência Java de 4 anos), parece que estou tendo dificuldades em entender quando usar extensões de classe. Pelo que eu entendi (e por favor, me corrija se eu estiver errado), a principal diferença entre as categorias e extensões é que a extensão espera que você implemente os métodos dentro de sua implementação principal, enquanto que com uma categoria, ela pode estar em outra implementação . Parece também que as pessoas estão usando extensões principalmente para métodos privados.
Aqui está minha primeira pergunta. Qual é a diferença entre usar uma extensão de classe para declarar um método privado e não declará-lo (parece compilar em execução nos dois casos)? (exemplo 1 vs 2)
Exemplo 1
@interface Class()
-(void) bar;
@end
@implementation Class
-(void) foo {
[self bar];
}
-(void) bar {
NSLog(@"bar");
}
@end
Exemplo 2
@implementation Class
-(void) foo {
[self bar];
}
-(void) bar {
NSLog(@"bar");
}
@end
Segunda pergunta: Qual é a diferença entre declarar ivars dentro da extensão e declará-la diretamente dentro da implementação? (Exemplo 3 vs 4)
Exemplo 3
@interface Class() {
NSArray *mySortedArray;
}
@end
@implementation Class
@end
Exemplo 4
@implementation Class
NSArray *mySortedArray;
@end
Eu tenho uma última pergunta sobre convenções de codificação: quando devo colocar um sublinhado (_) na frente do nome de uma variável?
Obrigado