【问题标题】:Cocoa Touch: Accessor method + memory needs clarificationCocoa Touch:Accessor方法+内存需要澄清
【发布时间】:2009-07-22 20:40:01
【问题描述】:

请考虑构造数组并将其返回给父对象的问题。请在下面查看我的代码和 cmets。

我的问题是:为什么方法三有效,而方法一和二无效?

// ****************************
// 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
}

【问题讨论】:

  • 我是EXC_BAD_ACCESS,顺便说一句。 EXC,异常的缩写。

标签: iphone objective-c cocoa cocoa-touch


【解决方案1】:

-arrayWithObjects: 或 -initWithObjects 接受一个以 nil 结尾的可变长度参数列表。

你写道:

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

你应该写的地方:

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

【讨论】:

    猜你喜欢
    • 2011-06-27
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 2011-11-09
    • 2012-07-18
    相关资源
    最近更新 更多