/ / Utilizzo di "id" per far sì che XCode interrompa l'avviso invece dei tipi corretti - obiettivo-c, xcode

Usando `id` per ottenere XCode per interrompere l'avviso anziché i tipi corretti - obiettivo-c, xcode

Proprio come ai tempi dei Java pre-generici, scrivo codice come questo:

UIView *ball = [self.balls objectAtIndex:i];

che provoca un avviso del compilatore. So che il modo corretto per risolverlo - ammesso che non esploda in fase di esecuzione - è usare

UIView *ball = (UIView *)[self.balls objectAtIndex:i];

ma recentemente ho preferito

UIView *ball = (id)[self.balls objectAtIndex:i];

C'è QUALCHE motivo per non farlo? Cambia qualcosa in fase di esecuzione? È più facile scrivere e leggere, credo.

risposte:

2 per risposta № 1

O hai definito un tipo personalizzato che risponde a objectAtIndex: invece di utilizzare un array integrato o c'è qualcosa che non va nella tua configurazione. NSArray "s objectAtIndex: è definito per restituire il tipo "id", quindi il cast diil risultato per digitare "id" non ha alcun effetto. Inoltre, oggetti di qualsiasi tipo possono essere assegnati a id e oggetti di tipo id possono essere assegnati a qualsiasi altro tipo senza generare un avviso del compilatore.

In ogni caso, il casting del puntatore non ha alcun effetto in fase di esecuzione. Objective-C non modifica il modo in cui funzionano i puntatori in C oltre a fornire alcune conversioni implicite aggiuntive.