我使用的是NSArray类型的属性。然后我尝试初始化或设置NSArray的值。当我使用速记分配时,我获得了输出。但是当我尝试长初始化样式时,我没有得到结果。后者的正确方法应该是什么?
以下是代码段:
@property NSArray * moods;
//shorthand assignment
self.moods=@[@"Happy",@"Sad"];
NSLog(@"Hello %@",[self moods]);
这很有效。但是当我尝试时:
//long initialization style
[[self moods]initWithObjects:@"Happy",@"Sad", nil];
NSLog(@"Hello %@",[self moods]);
这不是一样的。请给我一些建议。
答案 0 :(得分:3)
第二个例子应该是:
self.moods = [[NSArray alloc] initWithObjects:@"Happy",@"Sad", nil];
必须始终在init之前调用 alloc
来实际为对象分配内存。在您为[self moods]
分配内容之前,self.moods
将返回nil。
编辑:
如果你真的想要出于某种原因避免使用属性点表示法语法进行赋值,你可以改用setter方法:
[self setMoods: [[NSArray alloc] initWithObjects:@"Happy",@"Sad", nil]];
答案 1 :(得分:0)
上面的答案是完全正确的。我希望只是为了完整性添加评论,但我不能这样做,所以我会添加一个额外的答案来提供所有选项。
如果你总是对alloc和init的顺序感到困惑,你可以使用便利初始化器。或者如果你想要更清晰的代码。
self.moods = [NSArray arrayWithObjects:@"Happy",@"Sad", nil];
但是上面的答案是完美的,我个人更喜欢更明确的alloc init模式。
答案 2 :(得分:0)
只是一些没有点的替代方法......;)
[self setMoods:@[@"Happy", @"Sad"];