如何初始化NSString的NSArray?

时间:2016-06-20 19:49:49

标签: ios objective-c nsarray

我使用的是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]);

这不是一样的。请给我一些建议。

3 个答案:

答案 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"];