SORU
4 Ocak 2010, PAZARTESİ


Kopya & mutableCopy?

Arasındaki fark nedir "" ve""? mutableCopy kopyala

EDİT_001:

Benim orijinal sonrası bir karmaşa, bir anlayış eksikliği kısmen iyi ve kısmen benim pilot hatası biraz da bağlı biraz. Burada daha iyi nasıl ""mutableCopy" iş." & kopyalama izah etmek için bir çabadır

// ** NSArray **
NSArray *myArray_imu = [NSArray  arrayWithObjects:@"abc", @"def", nil];

// No copy, increments retain count, result is immutable
NSArray *myArray_imuCopy = [myArray_imu copy];

// Copys object, result is mutable 
NSArray *myArray_imuMuta = [myArray_imu mutableCopy];

[myArray_imuCopy release];
[myArray_imuMuta release];

.

// ** NSMutableArray **
NSMutableArray *myArray_mut = [NSMutableArray arrayWithObjects:@"A", @"B", nil];

// Copys object, result is immutable
NSMutableArray *myArray_mutCopy = [myArray_mut copy];

// Copys object, result is mutable
NSMutableArray *myArray_mutMuta = [myArray_mut mutableCopy];

[myArray_mutCopy release];
[myArray_mutMuta release];

EDİT_002:

  1. mutableCopy her zaman değiştirilebilir bir sonuç verir.
  2. kopya her zaman değişmez bir sonuç verir.

tüm cevaplar, yorumlar için ... çok takdir ederim.

gary

CEVAP
4 Ocak 2010, PAZARTESİ


copy mutableCopy farklı protokoller tanımlanmıştır (NSCopying NSMutableCopying, sırasıyla), ve NSArray Her ikisi de uygundur. mutableCopy NSArray (NSMutableArray) için tanımlanan ve ilk olarak sabit bir dizi değiştirilebilir bir kopyasını yapmak için izin verir:

// create an immutable array
NSArray *arr = [NSArray arrayWithObjects: @"one", @"two", @"three", nil ];

// create a mutable copy, and mutate it
NSMutableArray *mut = [arr mutableCopy];
[mut removeObject: @"one"];

Özet:

  • mutableCopy sonucu değişken, orijinal türü ne olursa olsun güvenebilirsiniz. Diziler halinde, sonuç NSMutableArray bir olmalıdır.
  • sanaolamazcopy sonucu değişken olmaya bağlıdır! copyıng NSMutableArrayolabilirorijinal sınıfının beri* *19, bir dönüş, ama copyNSArray ıng rasgele bir örnek olmaz.

Düzenleme:yeniden okumak Mark Bessey cevabı ışığında orijinal kodu. Dizinizi bir kopyasını oluşturduğunuzda, tabii ki hala orijinal kopyası ne olursa olsun değiştirebilirsiniz. copy mutableCopy vs etkiler miyeni bir diziolur kesilebilir.

Edit 2:(Yanlış) varsayımı sabit NSMutableArray -copy NSMutableArray bir dönecekti.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FrameCityJackal

    FrameCityJac

    4 Aralık 2010
  • Sarah's YouTube Channel

    Sarah's YouT

    27 Temmuz 2009
  • ThreadBanger

    ThreadBanger

    2 Mart 2007