NSMutableArray arrayWithArray vergleicht dasselbe wie NSArray mutableCopy?

7

Ist die Variable newMutableArrray nach dem folgenden Codebeispiel abhängig von den zwei verschiedenen Initialisierungen oder dem gleichen?

%Vor%     
seeker12 06.01.2013, 20:27
quelle

4 Antworten

6

Ein Array ist gleich einem anderen Array (isEqualToArray: selector), wenn sie die gleichen Objekte (in der gleichen Reihenfolge) haben. Dies wird mit der isEqual: -Methode verifiziert (abgesehen davon, dass das Array veränderbar ist oder nicht).

Sie sind genauso, die eine oder andere Initialisierung macht keinen Unterschied. Überprüfen Sie, ob das Ergebnis von isEqualToArray protokolliert wird:.

%Vor%

Beachten Sie, dass der Vergleich auch dann wahr wäre, wenn Sie ihn mit einer nicht veränderbaren Kopie verglichen haben.

    
Ramy Al Zuhouri 06.01.2013, 20:38
quelle
15

NEIN !!! Zwischen diesen Initialisierungen gibt es zwei Unterschiede:

  1. Zählung beibehalten: Im ersten Fall erhalten Sie ein automatisch freigegebenes Objekt, im zweiten Fall erhalten Sie ein beibehaltenes Objekt, das Sie nachher freigeben müssen (dies trifft nicht auf ARC zu)

  2. Wenn originalArray nil ist, erhalten Sie im ersten Fall ein veränderbares Array mit 0 Elementen, im zweiten Fall erhalten Sie null (weil das Senden einer Nachricht an nil mit nil endet). In Ihrem Beispiel ist es klar, dass originalArray nicht Null ist, aber im wirklichen Leben können Sie diesen Fall erreichen (ich hatte gerade den Fall)

Johnmph 21.04.2013 10:35
quelle
1

Nein, das Ergebnis ist genau dasselbe.
Nur die Initialisierung ist anders

    
NSAddict 06.01.2013 20:36
quelle
1

Um zu antworten, müssen wir "Gleichheit" definieren. Die beiden Eingänge nebeneinander ergeben unterschiedliche Sammlungen, aber sie sind insofern dieselben, als sie auf die gleichen Elemente verweisen.

Mit anderen Worten:

%Vor%     
danh 06.01.2013 20:42
quelle