Wie konvertiere ich NSMutableArray zu NSArray in objektiv-c ?
Antworten
Zu viele Anzeigen?NSArray *array = mutableArray;
Este [mutableArray copy]
Antipattern ist überall im Beispielcode zu finden. Hören Sie auf, dies für wegwerfbare veränderbare Arrays zu tun, die vergänglich sind und am Ende des aktuellen Bereichs freigegeben werden.
Es gibt keine Möglichkeit, wie die Laufzeitumgebung das verschwenderische Kopieren eines veränderlichen Arrays optimieren könnte, das kurz davor ist, den Gültigkeitsbereich zu verlassen, auf 0 zu dekrementieren und endgültig zu deallokieren.
Wenn Sie ein Array über Mutability konstruieren und dann eine unveränderliche Version zurückgeben wollen, können Sie einfach das mutable Array als "NSArray" über Vererbung zurückgeben.
- (NSArray *)arrayOfStrings {
NSMutableArray *mutableArray = [NSMutableArray array];
mutableArray[0] = @"foo";
mutableArray[1] = @"bar";
return mutableArray;
}
Wenn Sie dem Aufrufer "vertrauen", dass er das (technisch noch veränderbare) Rückgabeobjekt als unveränderliches NSArray behandelt, ist dies eine günstigere Option als [mutableArray copy]
.
Um festzustellen, ob er ein empfangenes Objekt ändern kann, muss sich der Empfänger einer Nachricht auf den formalen Typ des Rückgabewerts verlassen. Wenn er zum Beispiel ein Array-Objekt empfängt, das als unveränderlich typisiert ist, es sollte nicht versuchen, es zu mutieren . Es ist keine akzeptable Programmierpraxis, anhand der Klassenzugehörigkeit zu bestimmen, ob ein Objekt veränderbar ist.
Die oben beschriebene Praxis wird hier ausführlicher erläutert:
Bewährte Praxis: Rückgabe von mutableArray.copy oder mutableArray, wenn der Rückgabetyp NSArray ist
- See previous answers
- Weitere Antworten anzeigen