Wie wir wissen, mit ARC brauchen wir eine __bridge
eine ID zu einem void *
zu konvertieren:__bridge für Methodenargumente nicht benötigt?
void *t = (void *)self; // ERROR: Cast of ... requires a bridged cast
void *t = (__bridge void *)self; // CORRECT
So sind C-Funktion aufruft:
void f(void *t) {
....
}
f((void *)self); // ERROR
f((__bridge void *)self); // CORRECT
Ich denke, das auch für die Methoden halten sollte, und in der Tat diese Beginning ARC in iOS 5 Tutorial gibt folgendes Beispiel, und sagt, dass die __bridge
benötigt wird:
MyClass *myObject = [[MyClass alloc] init];
[UIView beginAnimations:nil context:(__bridge void *)myObject];
Allerdings habe ich heute versehentlich einen __bridge
in einem Methodenaufruf in einem meiner Programme gelöscht, und der Code kompiliert und lief ohne jedes Problem. Die __bridge
in dem obigen Beispiel scheint nicht notwendig zu sein:
[UIView beginAnimations:nil context:(void *)myObject]; // COMPILED OK
Ist das richtig? Ist die __bridge
in diesem Fall wirklich unnötig? Oder das Entfernen ändert sich, was der Code bedeutet?
Sehr interessant und gut gesichtet. +1, weil du mir noch einen weiteren Grund gegeben hast, ARK zu hassen ;-) –