Objective C二维数组内存问题

时间:2011-02-16 23:27:25

标签: iphone objective-c ios multidimensional-array

我正在尝试将一个二维数组声明为Objective C中的实例变量。我在头文件(数据)中有了NSMutableArray,还有@property(非原子,保留)。在viewDidLoad中:我有:

data = [[NSMutableArray alloc] init];
[data addObject:[[NSArray alloc] initWithObjects:@"Cheese", @"Meat", @"Veggie", nil]];
[data addObject:[[NSArray alloc] initWithObjects:@"Sandwich", @"Soup", @"Stew", nil]];

我可以在方法中NSLog数组并且它是正确的,但是当我尝试从单独的方法中记录它时,我什么也得不到(只是“@”),如果我尝试访问

NSInteger num = [[data objectAtIndex:component] count];

它在日志中没有错误崩溃。我确定这与正确分配内存无关,但我是Obj C的新手,并且多年来一直没有使用C风格的语言。 FWIW,我尝试了很多变种都失败了,包括使用NSArray而不是可变,[NSArray arrayWithObjects]而不是[[NSArray alloc] initWithObjects],以及它们之间的每个组合。

3 个答案:

答案 0 :(得分:1)

尝试像这样创建外部数组:

 self.data = [NSMutableArray arrayWithCapacity:2];  // assuming you're only adding 2 inner arrays.

答案 1 :(得分:1)

以下可能是正确的方法。

self.data = [NSMutableArray array];
[data addObject:[NSArray arrayWithObjects:@"Cheese", @"Meat", @"Veggie", nil];
[data addObject:[NSArray arrayWithObjects:@"Sandwich", @"Soup", @"Stew", nil];

请注意,正如@jamihash上面评论的那样,你需要self.data来正确保留数组。并且,您无需alloc NSArray添加到data

答案 2 :(得分:0)

作为一个副作用,你要保留两次子数组。将它们添加到NSMutableArray时会保留它们,因此您可能应该在创建时自动释放它们,或者使用返回自动释放数组的NSArray方法之一创建它们。

您的代码本身不应该崩溃。您应该查看释放和保留NSMutableArray的位置和时间。您可以发布更多代码,我相信有人会发现问题。