Das ist was ich meine:
Nach dem, was ich gelesen habe, ist ein objc_msgSend
im Wesentlichen was auf der C-Ebene passiert, wenn Sie eine Objective-C-Nachricht senden, und diese Einstellung auf Yes
stellt sicher, dass die gesendete Nachricht dieselbe Nummer hat von Argumenten wie der Empfänger erwartet.
Stimmt das? Was sind die Vor- und Nachteile, wenn Sie dies auf Yes
oder No
setzen? Soll ich das nur auf Yes
in Entwicklung und No
in Produktion setzen?
Sie sind im Wesentlichen richtig, ja.
Apple setzt es standardmäßig auf "Ja", weil es hilft, Fehler schneller zu finden. Der einzige Grund, um es auf Nein zu setzen, wäre, weil Sie Legacy-Code kompilieren, der nicht aktualisiert wurde, um mit dieser Option sauber zu kompilieren.
"Strikte Prüfung von objc_msgSend-Aufrufen aktivieren" ist eine Kompilierzeitprüfung, keine Laufzeit, daher ist es nicht vorteilhaft, sie in der Produktion auszuschalten.
Es gibt eine Präsentation "Was ist neu in LLVM" auf der Apple-Website ( Text der Präsentation ist hier ).
Es sieht so aus, als würde der Compiler nun (optional) die Arten von Aufrufen nach obj_msgSend genau prüfen. Sie müssen einen korrekt typisierten Funktionszeiger anstelle des direkten Aufrufs von objc_msgSend verwenden.
Beispiel gegeben:
%Vor%Tags und Links objective-c xcode