一千萬個為什麽

搜索

Objective-C為什麽我的數組數組不起作用?


這可能是一個完全愚蠢的問題,但我在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

所以,我知道還有其他方法可以制作多維數組, 但我真的很想知道為什麽這不起作用。 謝謝。

最佳答案

看起來你永遠不會創建 myComplicatedArray 。這意味著

[myComplicatedArray addObject:mySimpleArray];

實際上是

[nil addObject:mySimpleArray];

將消息發送到nil對Objective-C沒有任何影響,所以沒有任何反應。當你要求數組的計數時,你實際上是在發送 [nil count] ,它會在你的情況下返回0。您可以在此處找到有關向零發送郵件的更多信息


而且,當你在做的時候

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

mySecondaryArray will leak. You should release it, either with autorelease

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

release ,取決於哪個。

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

轉載註明原文: Objective-C為什麽我的數組數組不起作用?

猜你喜歡