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?
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).
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
).
Diese Überprüfung ist nicht notwendig. Sofern Sie nicht viele Iterationen dieses Codes durchführen (10.000, vielleicht mehr), ist der Zeitunterschied unbedeutend.
Tags und Links objective-c