Posso usar uma categoria de classe para substituir um método que já foi implementado usando uma categoria? Como isso:
1) Método original
-(BOOL) method {
return true;
}
2) Método substituído
-(BOOL) method {
NSLog(@"error?");
return true;
}
Isso funcionará ou é ilegal?
fonte
Você pode fazer isso adaptando a abordagem de Cluster de Classes ou usando a técnica de swizzling de métodos .
Caso contrário, o comportamento de dois ou mais métodos categorizados é indefinido
fonte
O link de documentação antigo está morto; O melhor substituto que pude encontrar foi aqui: Apple Docs :
É a Apple usando um toque mais leve, mas o ponto principal é o mesmo: você convida ao desastre, porque o comportamento imprevisível é silencioso.
fonte
É importante observar que uma categoria também pode ser usada para substituir métodos existentes na classe base (por exemplo, o método drive da classe Car), mas você nunca deve fazer isso. O problema é que as categorias são uma estrutura organizacional plana. Se você sobrescrever um método existente em Car + Maintenance.m, e então decidir que deseja alterar seu comportamento novamente com outra categoria, não há como Objective-C saber qual implementação usar. Subclassificar quase sempre é a melhor opção em tal situação.
A partir deste tutorial, http://rypress.com/tutorials/objective-c/categories
fonte