2009-07-22 29 views
1

请考虑构造数组并将其返回给父对象的问题。请看下面的代码和评论。Cocoa Touch:访问器方法+内存需要说明

我的问题是:为什么方法THREE工作,而方法ONE和TWO不工作?

// **************************** 
// Master.m 
// **************************** 

// Simply declare array and call accessor 
NSMutableArray * allElementTypes; 
allElementTypes = [ElementObject badElements]; 




// **************************** 
// ElementObject.m 
// **************************** 

// Doesn't work (EXE_BAD_ACCESS) 
+ (NSMutableArray*) badElements { 
    NSMutableArray * array = [[NSMutableArray alloc] initWithObjects:@"crab", @"poison", @"snake"]; 
    return array; 
} 

// Doesn't work (EXE_BAD_ACCESS) 
+ (NSMutableArray*) badElements { 
    return [NSMutableArray arrayWithObjects:@"crab", @"poison", @"snake"]; 
} 

// WORKS 
+ (NSMutableArray*) badElements { 
    NSMutableArray * array = [[NSMutableArray alloc] init]; 
     [array addObject:@"crab"]; 
     [array addObject:@"poison"]; 
     [array addObject:@"snake"]; 

    return array; // TODO: release this memory 
} 
+0

这是`EXC_BAD_ACCESS`,BTW。 `EXC`,简称为异常。 – 2009-07-22 23:33:27

回答

11

-arrayWithObjects:或-initWithObjects需要终止的零,可变长度,的参数列表。

您写道:

[NSMutableArray arrayWithObjects:@"crab", @"poison", @"snake"];

,你应该写:

[NSMutableArray arrayWithObjects:@"crab", @"poison", @"snake", nil];

+0

好啊!那很简单 :)。 – Buffalo 2009-07-22 20:50:13