Boyutu

2014-12-09 19 views
5

ile NSArray'ı başlangıç ​​durumuna getirin NSArray öğesinin boyutunu yalnızca daha sonra doldurmak için for döngüsünü kullanmak üzere nasıl başlatabilirim? Benim döngüBoyutu

for (int i = 0; i < [myArray count]; i++) { 
    myArray[i] = someData; 
} 
+0

Tüm yanıtlar NSArray'ın aksine bir NSMutableArray kullanmam gerektiğini söylüyor. Bu, bu sorunu çözmek için doğrudan NSArray kullanamadığım anlamına mı geliyor? –

+1

Bir NSArray, içeriğinin gelecekte düzenlenemeyeceği anlamına gelir. Bu ayrıca herhangi bir nesnenin diziye eklenmesini veya kaldırılmasını engeller, böylece uzunluğu her zaman sabit kalır. Diğer taraftan bir NSMutableArray, bu nesnelerin her zaman, başlatmadan sonra bile herhangi bir zamanda eklenebilir veya çıkarılabilir. –

+0

Kısıtlama, boyutun istemeden değiştirilmesini istemem ama aynı zamanda kullanıcıların değerleri güncelleştirmesini istiyorum. Dizi bir Boole dizisidir. Java'dan geliyorum, bu yüzden sorunumu anlıyorsun. NSMutableArray, boyutun büyüyebileceği anlamına gelir. Öyleyse, değerlerin değişmesine izin verirken, boyutta yanlışlıkla değişimi nasıl önleyebilirim? –

cevap

2

NSNull bir unset geçersiz veya varolmayan bir nesneyi temsil etmek için kullanılan sınıftır olurdu. Bu nedenle, diziyi bu sınıfın örneklerini kullanarak belirli bir boyuta sabitleyebilirsiniz. pozisyon i de değeri yok eğer sınırları hatasını neden olacağından

NSUInteger sizeOfArray = 10; 
NSMutableArray *someArray = [NSMutableArray array]; 
for (NSUInteger i = 0; i < sizeOfArray; i++) { 
    [someArray addObject:[NSNull null]]; 
} 

Dahası, sen sözdizimi someArray[i] = xyz; kullanamaz.

+0

Bir dizi tahsis etmenin herhangi bir yolu var mı daha sonra 'addObject' ile bir şey eklemeden dizi [i] = obj' yapabilirim? –

5

Belirli bir boyutta kullanıma hazır hale getirmeniz gerekmez - Daha sonra nesneleri ekleyebilirsiniz:

NSMutableArray * myArray = [NSMutableArray arrayWithCapacity:100]; 
: vaktinden boyutunu biliyorsanız

NSMutableArray * myArray = [NSMutableArray array]; 

for (int i = 0; i < 100; i++) { 
    [myArray addObject:someData]; 
} 

hafif performans kazançları vardır

Ancak bu isteğe bağlıdır.