2011-04-22 44 views
17

我這種情況IOS:NSMutableArray的initWithCapacity

array = [[NSMutableArray alloc] initWithCapacity:4]; //in viewDidLoad 

if (index == 0){ 
    [array insertObject:object atIndex:0]; 
} 

if (index == 1){ 
    [array insertObject:object atIndex:1]; 
} 

if (index == 2){ 
    [array insertObject:object atIndex:2]; 
} 

if (index == 3){ 
    [array insertObject:object atIndex:3]; 
} 

,但如果我爲了物體插入它的一切OK,而是如果我填的是陣列順序:0和3之後,不工作好,爲什麼?

+0

你試圖在4插入對象索引嗎? – saadnib 2011-04-22 11:11:45

+0

不.....我試着插入對象在索引0和後在索引2,但它不工作 – CrazyDev 2011-04-22 11:13:42

回答

49

即使容量爲4,也不能在索引3中插入對象NSMutableArray。可變數組具有與其中有對象一樣多的可用「單元」。如果你想在一個可變數組中有「空單元格」,你應該使用[NSNull null]對象。這是一個特殊的存根對象,這意味着無數據在這裏。

NSMutableArray *array = [[NSMutableArray alloc] init]; 

for (NSInteger i = 0; i < 4; ++i) 
{ 
    [array addObject:[NSNull null]]; 
} 

[array replaceObjectAtIndex:0 withObject:object]; 
[array replaceObjectAtIndex:3 withObject:object]; 
-3

你不能插入,例如在索引0,然後在索引2,你必須插入步驟通過插入到0,1,2,3,4,5 .....,n你想要什麼做?你有什麼問題 ???

你可以嘗試創建一個數組,然後初始化爲零項,然後插入它!我認爲它會工作!

+0

如果我按順序插入對象沒有問題....但如果我想插入一個對象先在0位置,然後在2或3位置出現問題,好嗎?上升是好的,但隨機不......你明白嗎? – CrazyDev 2011-04-22 11:16:11

10

在C風格int a[10]創建大小10的陣列並且可以從0以任何順序訪問任何索引9。但是initWithCapacityarrayWithCapacity並非如此。這只是底層系統可以用來提高性能的暗示。這意味着你不能無序插入。如果您有一個大小爲n的可變陣列,則只能從索引0n0至插入用於現有位置,而n用於插入結束位置。所以0,1,2,3是有效的。但是,0,3或1,2順序無效。

0

你不能插入任何隨機索引,如果你想這樣做,然後首先用空對象初始化你的數組,然後調用replaceObjectAtIndex。

相關問題