NSArray-Eigenschaft: kopieren oder beibehalten?
Laut: NSString-Eigenschaft: kopieren oder behalten?
Für NSString/NSMutableString, kopieren empfohlen.
Wie etwa NSArray/NSMutableArray?
InformationsquelleAutor der Frage Howard | 2011-05-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
wählen Sie
copy
, es sei denn, Sie haben einen ganz bestimmten Grund, nicht zu, wie auch den unterstützenden code/interface zu belegen.ich detailliert die Begründung und mehrere Implikationen:
NSMutableString wie behalten/kopieren
das Beispiel basiert auf
NSString
s, aber das gleiche gilt fürNSArray
s.InformationsquelleAutor der Antwort justin
Da Sie Fragen über die NSArray (statt NSMutableArray), sollten Sie kopieren. NSArray ist unveränderlich, so dass Sie nicht erwarten, eine Eigenschaft, die Art zu ändern. Aber NSMutableArray ist eine Unterklasse von NSArray, so ist es perfekt für die Person gültig, passieren in einem NSMutableArray. Wenn Sie nur behalten, dass das Objekt, dann kann es ändern, direkt unter eurer Nase. Wenn Sie kopieren, anstatt zu behalten, dann wird das Objekt nicht ändern.
Jedoch, sollten Sie sich bewusst sein, dass, wenn Sie kopieren einen container wie NSArray, Sie kopieren den container und nicht nur seinen Inhalt. Wenn das array enthält mutable-Objekte, die Inhalte der Objekte kann sich ändern, obwohl das array selbst ist unveränderlich.
InformationsquelleAutor der Antwort Caleb
Falls es ein problem ist, wenn die zugrunde liegenden Daten ändern, verwenden kopieren. In der Tat, das ist, was Sie wollen die meisten der Zeit, als das ändern von Daten hinter jemandes Rücken ist eine gute Quelle für bugs.
Beachten Sie, dass die Kopie wird im wesentlichen nur eine behalten, für ein NSArray. Nur, wenn Sie werfen ein NSMutableArray, es ist mehr Arbeit beteiligt.
InformationsquelleAutor der Antwort Eiko
Aus dem link, den Sie enthalten, es ist ziemlich viel kommt unten zu diesem: NSString-Eigenschaft: kopieren oder behalten?
Wenn Sie wollen, stellen Sie sicher, dass der Wert des Objekts nicht ändern, während der Ausführung, verwenden Sie die
copy
Attribut, sonstretain
wird in Ordnung sein. Generellretain
ok sein, für NSMutableArrays und NSArrays (wie auch viele andere Objekte), wie Sie (in der Regel) mehr daran interessiert, das Objekt dann in den Wert, den es enthält. Im Falle eines NSString Sie sind immer daran interessiert, den Wert, so dass Siecopy
es, um sicherzustellen, es wird sich nichts ändern.@jlehr:
Es hängt davon ab, ob der Entwickler ist daran interessiert, den tatsächlichen Wert oder nicht. Wenn interessiert den tatsächlichen Wert kopieren (da Sie nicht wollen, den Wert zu ändern, während der Ausführung), sonst behalten ist in Ordnung. Von den Apple-docs:
Auch von den Apple-docs, die auf das Thema der Wert-Objekte:
InformationsquelleAutor der Antwort Wolfgang Schreurs