首页 文章

Objective C二维数组内存问题

提问于
浏览
0

我正在尝试将一个二维数组声明为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 回答

  • 1

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

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

    以下可能是正确的方法 .

    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 .

  • 1

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

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

相关问题