2013-06-10 15 views
10

Molti sviluppatori Objective-C, sia principianti che esperti, sembrano considerare id come se fosse un tipo magico di tipo catch-all su cui è possibile eseguire il cast di un oggetto e inviare qualsiasi vecchio messaggio senza conseguenze (dal compilatore, almeno) . Tuttavia, quando si guarda effettivamente alla definizione di id, non si tratta di un puntatore a un objc_object. In questo modo, è letteralmente un "oggetto Objective-C", ma nulla può "discendere" da id. Anche colpo di testa di NSObject non assomiglia:ID è un "tipo root" o solo un tipo?

@interface NSObject : id 

Si legge semplicemente:

@interface NSObject 

Ora, io sono fermamente convinto che id 's suppone tipo di neutralità è un effetto collaterale del suo implementazione, ma perché ci sono quelli che ancora pensano diversamente, devo chiedere:

Qual è esattamente la funzione primaria del tipo id?

risposta

10

id è solo un puntatore di oggetto generico, come hai trovato. Dal momento che non è una classe, nulla può ereditarlo. NSObject, in senso stretto, non fa parte del linguaggio Objective-C stesso, solo parte di una particolare implementazione.

id è conveniente per un linguaggio come Objective-C che ha una digitazione così debole; ti permette di mantenere i puntatori di oggetti generici e di inviarli messaggi arbitrari.

+1

+1 distinzione tra lingua e implementazione. – utahwithak

+2

Preferisco la definizione di id di @ bbum. L'ha descritto come "Un tipo che può ricevere qualsiasi messaggio", che simula il "tipo neutro" di ObjC. – CodaFi

+0

Questa è una buona descrizione, sì. –

Problemi correlati