Domanda

Ad esempio:

@interface Fraction: NSObject {
...

Quando non sarebbe NSObject essere utilizzato ed è <=> la classe padre definitiva per tutte le altre classi?

Non esitate a correggermi su qualsiasi terminologia sbagliata utilizzato.

È stato utile?

Soluzione

Se stavo scrivendo una sottoclasse di NSView, avrei scritto:

@interface Fraction: NSView {...

perché la mia classe eredita da NSView. Le classi in Objective-C ereditare da una sola classe genitore. Come si lavora la strada lungo la catena da NSView (alla sua classe genitore, NSResponder), si dovrebbe trovare che alla fine eredita da NSObject.

Non sono sicuro circa la seconda parte della tua domanda. Credo che tutte le classi di Cocoa framework di Apple alla fine ereditano da NSObject, ma non citare me su questo. Non c'è motivo, in Objective-C, perché non ci potrebbero essere altri oggetti di root (altrimenti Objective-C potrebbe venire utilizzata solo su sistemi Apple). Tuttavia, in Cocoa, NSObject è la radice.

Altri suggerimenti

In qualsiasi applicazione Cocoa, se si esamina l'albero di classe runtime, troverete cinque classi root:. NSObject, oggetto, NSProxy, NSMessageBuilder, e NSZombie

oggetti più comuni nella vostra applicazione sarà discendono da NSObject. L'oggetto è la classe radice originale dai primi giorni di Objective-C, ed è stato sostituito da NSObject quando NeXT era sviluppare l'Enterprise Objects Framework.

NSMessageBuilder è utilizzato dal runtime per l'inoltro dei messaggi. NSProxy viene utilizzato dall'implementazione oggetti distribuito a che fare con marshaling messaggi da inviare agli oggetti in altri processi o anche su altri host. NSZombie è una classe che viene utilizzato per il debug di perdite di memoria.

cacao ha due classi: radice. NSObject e NSProxy

NSObject è la classe radice di quasi tutti gli oggetti di cacao.

NSProxy è una superclasse astratta che definisce un'API per gli oggetti che agiscono come stand-in per altri scopi o per gli oggetti che non esistono ancora, ed è la classe principale per classi come NSDistantObject.

Entrambe le classi implementano il protocollo NSObject.

E 'anche possibile scrivere le proprie classi Objective C che non hanno una classe radice, ma si sarebbe probabilmente mai farlo, e non sarebbe in grado di utilizzarlo con cacao per gran parte di tutto ciò a meno che anche implementato il protocollo NSObject, e anche allora sarebbe di utilizzo dubbia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top