2015-01-04 2 views
8

Dies ist, was ich spreche:
enter image description hereWas genau bedeutet "Enable Strict Checking von objc_msgSend Calls"?

Von dem, was ich gelesen habe, ein objc_msgSend ist im Wesentlichen, was auf der c-Ebene geschieht, wenn Sie eine Objective-C-Nachricht senden, und diese Einstellung auf Yes stellt sicher, dass die zu sendende Nachricht die gleiche Anzahl von Argumenten hat wie der Empfänger erwartet.

Ist das korrekt? Was sind die Vor- und Nachteile für die Einstellung auf Yes oder No? Sollte ich dies nur auf Yes in Entwicklung und No in Produktion setzen?

+1

Cocoapods hat dies für jeden seiner Schoten standardmäßig aktiviert, so scheint es. Wie kann dies standardmäßig ausgeschaltet werden? – fatuhoku

Antwort

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 sauber mit dieser Option zu kompilieren.

"Enable Strict Checking von objc_msgSend Calls" ist eine Kompilierzeitprüfung, keine Laufzeit, es gibt also keinen Vorteil, es in der Produktion auszuschalten.

6

Es gibt eine presentation "Was ist neu in LLVM" auf der Apple-Website (Text der Präsentation ist here).

Es sieht so aus, als würde der Compiler nun (optional) streng die Arten von Aufrufen an obj_msgSend überprüfen. Sie werden einen korrekt getippten Funktionszeiger anstelle des direkten Aufrufs objc_msgSend verwenden.

Beispiel gegeben:

#include <objc/message.h> 
void foo(void *object) { 
    typedef void (*send_type)(void *, SEL, int); 
    send_type func = (send_type)objc_msgSend; 
    func(object, sel_getUid("foo:"), 5); 
} 
+4

oh ein weiterer unerklärlicher downvote – nielsbot

+0

war ich nicht! Ich habe mich wirklich gefragt, wo diese Präsentation war, weil ich die Dias gesehen habe und es ein wenig nutzlos war, ohne dass jemand sie erklärt hat. –

+0

Ja, das bekomme ich - der Text der Präsentation ist auf dem zweiten Link umgeschrieben. Sie sollten auch die ursprüngliche Präsentation über die WWDC-Site anzeigen können. – nielsbot