Quando não NSObject ser declarado como a classe pai?
-
21-08-2019 - |
Pergunta
Por exemplo:
@interface Fraction: NSObject {
...
Quando não NSObject
ser usado e é NSObject
a classe pai final para todas as outras classes?
Por favor, sinta-se livre para me corrigir em qualquer terminologia errada usado.
Solução
Se eu estava escrevendo uma subclasse de NSView, eu ia escrever:
@interface Fraction: NSView {...
porque minha classe é herdada de NSView. Classes em Objective-C herdam apenas uma única classe pai. Como você trabalha o seu caminho até a cadeia de NSView (a sua classe pai, NSResponder), você teria que encontrar, eventualmente, herda de NSObject.
Eu não tenho certeza sobre a segunda parte da sua pergunta. Eu acho que todas as classes em quadros de cacau da Apple finalmente herdar de NSObject, mas não citar-me sobre isso. Não há nenhuma razão, em Objective-C, por que não poderia haver outros objetos raiz (caso contrário, Objective-C só seriam usados ??em sistemas Apple). No entanto, em Cocoa, NSObject é a raiz.
Outras dicas
Em qualquer app de cacau, se você examinar a árvore de classe de tempo de execução, você encontrará cinco classes de raiz:. NSObject, objeto, NSProxy, NSMessageBuilder, e NSZombie
A maioria dos objetos comuns na sua aplicação vai ser descendente de NSObject. Objecto é a classe raiz original a partir dos primeiros dias de Objective-C, e foi substituído por NSObject quando seguinte foi o desenvolvimento da Empresa Objectos Quadro.
NSMessageBuilder é usado pelo tempo de execução para o encaminhamento de mensagens. NSProxy é usado pela implementação de objetos distribuídos para lidar com empacotamento mensagens para enviar aos objetos em outros processos ou mesmo em outros hospedeiros. NSZombie é uma classe que é usado para depurar vazamentos de memória.
Cocoa tem duas classes de raiz:. NSObject e NSProxy
NSObject é a classe raiz de quase todos Cacau objetos.
NSProxy é uma superclasse abstrata que define uma API para objetos que agem como stand-ins para outros objetos ou para objetos que não existem ainda, e é a classe raiz para classes como NSDistantObject.
Ambas as classes implementar o protocolo NSObject.
Também é possível escrever suas próprias classes Objective-C que não têm uma classe raiz, mas você provavelmente nunca fazer isso, e você não seria capaz de usá-lo com cacau para muita coisa, a menos que você também implementou o protocolo NSObject, e mesmo assim seria de uso duvidoso.