Warnungen nicht unterdrücken!
Es gibt nicht weniger als 12 alternative Lösungen, um mit dem Compiler herumzuspielen.
Während du vielleicht klug bist, wenn du die erste Implementierung machst, kann kaum ein Ingenieur auf der Erde deinen Fußstapfen folgen, und dieser Code wird schließlich brechen.
Sichere Wege:
All diese Lösungen werden funktionieren, mit mehr oder weniger Abweichung von deiner ursprünglichen Absicht. Gehe davon aus, dass param
bei Bedarf nil
sein kann:
Sicherer Weg, gleiche konzeptionelle Verhalten:
// GUT
[_controller performSelectorOnMainThread:selector withObject:anArgument waitUntilDone:YES];
[_controller performSelectorOnMainThread:selector withObject:anArgument waitUntilDone:YES modes:@[(__bridge NSString *)kCFRunLoopDefaultMode]];
[_controller performSelector:selector onThread:[NSThread mainThread] withObject:anArgument waitUntilDone:YES];
[_controller performSelector:selector onThread:[NSThread mainThread] withObject:anArgument waitUntilDone:YES modes:@[(__bridge NSString *)kCFRunLoopDefaultMode]];
Sicherer Weg, leicht unterschiedliches Verhalten:
(Siehe diese Antwort)
Verwende jeden Thread anstelle von [NSThread mainThread]
.
// GUT
[_controller performSelector:selector withObject:anArgument afterDelay:0];
[_controller performSelector:selector withObject:anArgument afterDelay:0 inModes:@[(__bridge NSString *)kCFRunLoopDefaultMode]];
[_controller performSelectorOnMainThread:selector withObject:anArgument waitUntilDone:NO];
[_controller performSelectorOnMainThread:selector withObject:anArgument waitUntilDone:NO];
[_controller performSelectorOnMainThread:selector withObject:anArgument waitUntilDone:NO modes:@[(__bridge NSString *)kCFRunLoopDefaultMode]];
[_controller performSelectorInBackground:selector withObject:anArgument];
[_controller performSelector:selector onThread:[NSThread mainThread] withObject:anArgument waitUntilDone:NO];
[_controller performSelector:selector onThread:[NSThread mainThread] withObject:anArgument waitUntilDone:NO modes:@[(__bridge NSString *)kCFRunLoopDefaultMode]];
Gefährliche Wege
Erfordert eine Art von Compiler-Unterdrückung, die sicher brechen wird. Beachte, dass es zurzeit in Swift gebrochen ist.
// AUF EIGENES RISIKO
[_controller performSelector:selector];
[_controller performSelector:selector withObject:anArgument];
[_controller performSelector:selector withObject:anArgument withObject:nil];