/ / Verwenden von "id", um XCode dazu zu bringen, die Warnung anstelle von korrekten Typen zu stoppen - object-c, xcode

Verwenden von "id", um XCode dazu zu bringen, die Warnung anstelle von korrekten Typen zu stoppen - object-c, xcode

Wie schon in den Java-Tagen der Vor-Generika schreibe ich Code wie folgt:

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

was eine Compiler-Warnung verursacht. Ich weiß, dass es richtig ist, es zu lösen - vorausgesetzt, dass es nicht zur Laufzeit explodiert - zu verwenden ist

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

aber vor kurzem habe ich mich dafür entschieden

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

Gibt es einen Grund, dies nicht zu tun? Ändert sich zur Laufzeit etwas? Es ist einfacher zu tippen und zu lesen, denke ich.

Antworten:

2 für die Antwort № 1

Entweder haben Sie einen benutzerdefinierten Typ definiert, der auf objectAtIndex reagiert: anstatt ein integriertes Array zu verwenden, oder Ihre Konfiguration stimmt nicht. NSArray "s objectAtIndex: ist definiert, um den Typ "id" zurückzugebenErgebnis zum Typ "id" hat keine Auswirkung. Des Weiteren können Objekte jeden Typs der ID zugewiesen werden, und Objekte des Typs ID können jedem anderen Typ zugewiesen werden, ohne dass eine Compiler-Warnung generiert wird.

In jedem Fall hat die Zeigerumwandlung zur Laufzeit keine Auswirkungen. Objective-C ändert nicht die Funktionsweise von Zeigern in C, außer einige zusätzliche implizite Konvertierungen.