0

我正在尝试实现一种解析方法以将 XML 文档转换为多维数组,但是它依赖于在将该数组添加到多维数组之后需要从数组中删除对象,如下所示:

while (k<blockRowArray.count){                                   //loops through all rows one by one
        NSLog(@"current k is %i", k);
        GDataXMLDocument *currentRow = (GDataXMLDocument *) [blockRowArray objectAtIndex:k];
        NSArray *arrayOfBlocks = [currentRow nodesForXPath:@"b" error:nil];
        j = 0;
        while (j <arrayOfBlocks.count) {
            NSLog(@"current j is %i",j);
            GDataXMLElement *blockElement = (GDataXMLElement *) [arrayOfBlocks objectAtIndex:j];
            NSNumber* blockValue = [NSNumber numberWithInt:[[blockElement stringValue] intValue]];
            [individualRowOfBlocks addObject:blockValue];
            j++;
        }
        k++;
        NSLog (@"Current row of blocks array is %@",individualRowOfBlocks);


        [rowBlocks addObject:individualRowOfBlocks];
        [individualRowOfBlocks removeAllObjects];
    }

然而[individualRowOfBlocks removeAllObjects],显然是在同一时间或之前运行,[rowBlocks addObject:individualRowOfBlocks]因为我最终得到一个多维数组,其中包含一组空数组,所以我需要做的是确保[individualRowOfBlocks removeAllObjects][individualRowOfBlocks removeAllObjects]任何这样做的方法之后运行?

4

1 回答 1

1

但是 [individualRowOfBlocks removeAllObjects] 显然在 [rowBlocks addObject:individualRowOfBlocks] 的同时或之前运行,因为我最终得到了一个包含一组空数组的多维数组,所以我需要做的是确保 [ individualRowOfBlocks removeAllObjects] 在 [individualRowOfBlocks removeAllObjects] 之后运行任何方法吗?

除非涉及线程(或队列),否则 Objective-C 方法将始终按照代码中编写的顺序执行,除非被调用的方法在其实现中显式地在线程/队列中执行操作(这在该代码中极不可能)。

每次调用 时[rowBlocks addObject:individualRowOfBlocks];,都会添加对同一individualRowOfBlocks数组的新引用。如果您随后更改 的内容individualRowOfBlocks,则其中的每个插槽都rowBlocks将有效地反映该更改,因为每个插槽都指向数组的同一个实例

听起来,您应该在每次通过循环时removeAllObjects创建一个新实例,而不是 ,将其分配给.NSMutableArrayindividualRowOfBlocks

于 2012-10-24T16:40:49.600 回答