有人可以解释一下setWithObjects和initWithObjects之间的区别

时间:2012-03-05 18:33:07

标签: objective-c nsset

所以我花了大约一个小时左右与我的代码进行斗争,并最终发现我试图使用的NSSet是空的。一旦我从第一行代码切换到第二行代码,一切都很顺利。我只是希望有人能告诉我第一行有什么问题。它编译得很好,但显然没有做我希望的。

NSSet *singleOperandOperations = [singleOperandOperations initWithObjects: @"cos", @"sin", @"sqrt", nil];

v.s。

NSSet *singleOperandOperations = [NSSet setWithObjects: @"cos", @"sin", @"sqrt", nil];

谢谢!

3 个答案:

答案 0 :(得分:4)

setWithObjects:是一个所谓的便利构造函数,它实际上是alloc然后是initWithObjects:setWithObjects:只是打字少一点。请注意,按照惯例,此类便捷构造函数的返回idautorelease d。

所以你的第一个例子应该是:

NSSet *singleOperandOperations = [[NSSet alloc] initWithObjects: etc...];

这可以替换为:

NSSet *singleOperandOperations = [NSSet setWithObjects: etc...];

答案 1 :(得分:1)

我不是百分百肯定,但我相信你应该alloc它。这就是我要做的事情:

NSSet *singleOperandOperations = [[NSSet alloc]initWithObjects: @"cos", @"sin", @"sqrt", nil];

那会有效。你的另一条线也有效。区别仅在于您必须键入的字符数;)

希望有所帮助

答案 2 :(得分:0)

嗯,你的第一个例子是缺少alloc。但是通常调用alloc / init会分配一个你拥有的对象,而方便构造函数setWithObjects会返回一个自动释放的对象。