如何初始化 NSString 的 NSArray?

How to initialize an NSArray of NSString?

我正在使用 属性 NSArray 类型。然后我尝试初始化或设置 NSArray 的值。当我使用 shorthand 赋值 时,我得到了输出。但是当我尝试使用 长初始化样式 时,我没有得到结果。后者的正确做法应该是什么??

这是代码片段:

@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]);

这不是做同样的事情。请给我一些建议。

第二个例子应该是:

self.moods = [[NSArray alloc] initWithObjects:@"Happy",@"Sad", nil];

alloc 必须始终在 init 之前调用以实际为对象分配内存。 [self moods] 将变为 return 零,直到您将某些内容分配给 self.moods

编辑:

如果你出于某种原因真的想避免使用 属性 点符号语法进行赋值,你可以使用 setter 方法来代替:

[self setMoods: [[NSArray alloc] initWithObjects:@"Happy",@"Sad", nil]];

以上回答完全正确。为了完整起见,我很乐意添加评论,但我不能,所以我将添加一个额外的答案来提供所有选项。

如果你总是对 alloc 和 init 的顺序感到困惑,你可以使用便利初始化器。或者如果你想要更简洁的代码。

self.moods = [NSArray arrayWithObjects:@"Happy",@"Sad", nil];

但上面的答案是完美的,我个人更喜欢更明确的分配初始化模式。

只是一些没有点的替代方法...;)

[self setMoods:@[@"Happy", @"Sad"];