Was genau bedeutet "Enable Strict Checking von objc_msgSend Calls"?

8

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?

    
Mike V 04.01.2015, 23:05
quelle

2 Antworten

6

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.

    
Joshua D. Boyd 04.01.2015, 23:13
quelle
6

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%     
nielsbot 04.01.2015 23:14
quelle

Tags und Links