所以我花了大约一个小时左右与我的代码进行斗争,并最终发现我试图使用的NSSet是空的。一旦我从第一行代码切换到第二行代码,一切都很顺利。我只是希望有人能告诉我第一行有什么问题。它编译得很好,但显然没有做我希望的。
NSSet *singleOperandOperations = [singleOperandOperations initWithObjects: @"cos", @"sin", @"sqrt", nil];
v.s。
NSSet *singleOperandOperations = [NSSet setWithObjects: @"cos", @"sin", @"sqrt", nil];
谢谢!
答案 0 :(得分:4)
setWithObjects:
是一个所谓的便利构造函数,它实际上是alloc
然后是initWithObjects:
。 setWithObjects:
只是打字少一点。请注意,按照惯例,此类便捷构造函数的返回id
为autorelease
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会返回一个自动释放的对象。