Objective-C为什么我的数组数组不起作用?

时间:2010-05-04 08:13:11

标签: objective-c cocoa multidimensional-array

这可能是一个完全愚蠢的问题,但我在Objective-C和编程方面都很陌生。 我正在尝试制作一组​​数组,但无法使其工作:

@interface ArraysAndDicts : NSObject {
 NSMutableArray * mySimpleArray;
 NSMutableArray * myComplicatedArray;
}

实施:

-(void)generateValueForArrayOfArrays {

    [self generateValueForArray]; 
    //this generates an array with 5 elements 'mySimpleArray'

    [myComplicatedArray addObject:mySimpleArray];

    NSMutableArray * mySecondaryArray = [[NSMutableArray alloc] init];
    [mySecondaryArray addObject:@"twoone"];
    [mySecondaryArray addObject:@"twotwo"];

    [myComplicatedArray addObject:mySecondaryArray];

(为了清楚起见,我编辑了所有的NSLog)

运行我的应用时,控制台会告诉我:

  

mySecondaryArray count = 2

     

mySimpleArray count = 5

     

myComplicatedArraycount = 0

所以,我知道还有其他方法来制作多维数组, 但我真的很想知道为什么这不起作用。 谢谢。

3 个答案:

答案 0 :(得分:2)

看起来你永远不会创建myComplicatedArray。这意味着

[myComplicatedArray addObject:mySimpleArray];

实际上是

[nil addObject:mySimpleArray];

将消息发送到nil对Objective-C没有任何影响,所以没有任何反应。当您询问数组的计数时,您实际上正在发送[nil count],在您的情况下将返回0。你可以在这里找到more information about sending messages to nil


此外,当你正在做

NSMutableArray * mySecondaryArray = [[NSMutableArray alloc] init]; 
[mySecondaryArray addObject:@"twoone"]; 
[mySecondaryArray addObject:@"twotwo"];

mySecondaryArray会泄漏。您应该使用autorelease

发布它
NSMutableArray * mySecondaryArray = [[[NSMutableArray alloc] init] autorelease];
...

release,取决于哪个。

NSMutableArray * mySecondaryArray = [[NSMutableArray alloc] init];
...
[mySecondaryArray release];

答案 1 :(得分:0)

我们无法看到myComplicatedArray是如何初始化的。也许是nil

答案 2 :(得分:0)

您是否在某处初始化了myComplicatedArray

myComplicatedArray = [[NSMutableArray alloc] init];
[self generateValueForArray];
// etc...