Prüft vor dem Senden einer Freigabebotschaft, ob es nicht nil ist.

8

Wenn ich eine Instanz freigebe, die existieren könnte oder nicht, schreibe ich das normalerweise:

if (Objekt! = nil) [Objektfreigabe];

Aber da das Senden einer Nachricht an nil kein Problem ist, ist diese Bedingung notwendig?

Ich nehme an, die Frage kommt auf den folgenden Punkt: Was verbraucht mehr Overhead, vergleicht ein Objekt mit Null oder sendet keine Nachricht?

    
Steph Thirion 25.11.2008, 23:48
quelle

4 Antworten

14

Siehe diese Seite , die erklärt, dass Nachrichten an nil weitergeleitet werden (um zu verallgemeinern Ihr Beispiel) ist völlig in Ordnung.

Was mehr Overhead betrifft, wird jede Auswirkung auf die Leistung für die Gesamtleistung des Systems vernachlässigbar sein (nicht zu einer vorzeitigen Optimierung kommen).

    
shek 25.11.2008, 23:53
quelle
5

Wenn ich mehr C ++ als Obj-C codierte, würde ich immer Code schreiben, um nach nil zu suchen - weil es eine Notiz für mich selbst war, dass dieser Zeiger nil sein darf. Jetzt lasse ich objc_msgSend damit umgehen, da ich den Code mit der Annahme, dass jeder Zeiger gültig% code% sein könnte, besser gelesen habe.

Auf einer "sicheren Codierungsstufe" denke ich, dass es wichtiger ist, die Zeiger nach jeder Veröffentlichung immer auf nil zu setzen (möglicherweise unter Ausschluss einer nil in der Methode release ). Auf diese Weise stellen Sie sicher, dass Ihr Zeiger niemals ungültig ist (er ist entweder gültig oder dealloc ).

    
Matt Gallagher 27.11.2008 00:04
quelle
2

Diese Überprüfung ist nicht notwendig. Sofern Sie nicht viele Iterationen dieses Codes durchführen (10.000, vielleicht mehr), ist der Zeitunterschied unbedeutend.

    
Ben Gottlieb 25.11.2008 23:52
quelle
2

Obj-C prüft auf nil , es ist also nicht notwendig, dies zweimal zu tun.

%Vor%

Wenn Sie dort zusätzlichen Code hinzufügen möchten, ist es viel besser, den Zeiger nachher auf nil zu setzen, damit er nicht doppelt frei ist.

    
Kornel 27.11.2008 00:19
quelle

Tags und Links