【发布时间】:2012-12-26 12:01:21
【问题描述】:
注意:此问题已根据以下答案中提供的建议进行了更新,以便更全面地了解问题的当前状态。
您可以在这里查看完整的项目文件:https://github.com/cxx6xxc/Skeleton/blob/master/README.md
条件
我在对象的
init方法中创建了一个NSArray。我用它的 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;
}
问题
我没有做什么、缺少什么或我做错了什么导致返回值为空?
【问题讨论】:
-
你是如何实例化你的类的?那里有一个
init:方法让我很困扰,因为它没有参数,所以你发布的内容不会构建 -
尝试 self.labels = [NSArray arrayWithObjects:@"Red", @"Green", @"Blue", nil];
-
为什么不使用 NSMutableArray,而不是 NSArray
-
@Ismael,我是静态声明的,所以不需要发送初始化参数。我知道的?
-
我的意思是显示一些代码,错误很可能在那里
标签: objective-c