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
?
+1 distinzione tra lingua e implementazione. – utahwithak
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
Questa è una buona descrizione, sì. –