注意:此问题已根据以下答案中提供的建议进行了更新,以便更全面地了解问题的当前状态。
您可以在此处查看完整的项目文件:https ://github.com/cxx6xxc/Skeleton/blob/master/README.md
条件
NSArray
我在对象的init
方法中创建了一个。我用它的 get 方法返回 NSArray。
问题
到达后,NSArray 为空。
创建实例
尝试1:
这是我最初的实现。
- (id)init:
{
labels = [NSArray arrayWithObjects:@"Red", @"Green", @"Blue", nil];
return self;
}
尝试2:
Ismael 建议我用子类协议来包装它。
neo 建议我保留 NSArray。
- (id)init:
{
self = [super init];
if (self)
{
labels = [NSArray arrayWithObjects:@"Red", @"Green", @"Blue", nil];
[labels retain];
}
return self;
}
尝试 3:
Anoop Vaidya 建议我使用 alloc 和 NSMutableArray 强制所有权:
- (id)init:
{
self = [super init];
if (self)
{
labels = [[NSMutableArray alloc] initWithObjects:@"Red", @"Green", @"Blue", nil];
}
return self;
}
但是,当我返回对象时,尽管上面引用了不同的初始化建议......
返回对象
- (NSArray *)getLabels
{
return labels;
}
...与 NSMutableArray ...
- (NSMutableArray *)getLabels
{
return labels;
}
... NSArray getter 返回一个空对象。
调用方法
int main(void)
{
id view;
view = [ZZView alloc];
id model;
model = [ZZModel alloc];
id controller;
controller = [[ZZController alloc] init: model: view];
labels = [[controller getModel] getLabels];
if(labels)
NSLog(@"allocated");
else
NSLog(@"not alloced");
[view dealloc];
[model dealloc];
[controller dealloc];
return EXIT_SUCCESS;
}
问题
我没有做什么、缺少什么或我做错了什么导致返回值为空?