wake-up-neo.net

IOS: NSMutableArray initWithCapacity

Ich habe diese Situation

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];
}

aber wenn ich das Objekt in der Reihenfolge einfüge, ist alles in Ordnung, wenn ich das Array in dieser Reihenfolge fülle: 0 und nach 3 funktioniert es nicht gut, warum ???

18
CrazyDev

Sie können ein Objekt an Index 3 nicht in NSMutableArray einfügen, selbst wenn die Kapazität 4 ist. Das veränderliche Array verfügt über so viele "Zellen", wie sich Objekte darin befinden. Wenn Sie "leere Zellen" in einem veränderlichen Array haben möchten, sollten Sie [NSNull null]-Objekte verwenden. Hierbei handelt es sich um spezielle Stub-Objekte, die keine Daten bedeuten.

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];
52
Zapko

Im C-Stil erstellt int a[10] ein Array der Größe 10, und Sie können in beliebiger Reihenfolge auf jeden Index von 0 bis 9 zugreifen. Dies ist jedoch bei initWithCapacity oder arrayWithCapacity nicht der Fall. Es ist nur ein Hinweis, dass das zugrunde liegende System die Leistung verbessern kann. Dies bedeutet, dass Sie nicht außerhalb der Reihenfolge einfügen können. Wenn Sie ein veränderbares Array der Größe n haben, können Sie nur den Index 0 in n einfügen, 0 bis n-1 ist für vorhandene Positionen und n für das Einfügen an der Endposition. 0, 1, 2, 3 ist also gültig. Eine 0, 3 oder 1,2-Reihenfolge ist jedoch nicht gültig.

10
taskinoor

Sie können an keinem zufälligen Index einfügen. Wenn Sie dies tun möchten, initialisieren Sie zunächst Ihr Array mit Nullobjekten und rufen Sie replaceObjectAtIndex auf.

0
saadnib