我想做这个:
[[ClassA new] addObject:[[ClassA new] addObject:[ClassA new]]];
Run Code Online (Sandbox Code Playgroud)
但编译器返回:
"error: invalid use of void expression"
Run Code Online (Sandbox Code Playgroud)
有办法吗?喜欢在java中:
ClassA = new ClassA( new ClassA( new ClassA()));
Run Code Online (Sandbox Code Playgroud)
真正的问题是-[ClassA addObject:]很可能有返回类型的void,所以你不能将该表达式嵌套为outer -addObject:call 的参数.有关示例,请参阅文档-[NSMutableArray addObject:]- 方法签名是- (void) addObject:(id)anObject.如果您习惯于使用其他语言(尤其是Java)的不同行为,这可能会让您措手不及.还要注意-removeObject:返回void,而不是已删除的对象.
此外,每个人都缺少+new继承的点,除非被覆盖 - 请参阅+[NSObject new].然而,使用+new"不流行",并且+alloc/-init...是优选的.一个原因是,无论如何+new调用-init,您必须创建一个+ new ...变体来匹配类中的每个-init .... 到那时,你会得到很多不必要的代码来解决非问题.我个人+new很少使用,只有当我知道我只使用时-init.
由于你来自Java背景,如果你对Objective-C使用alloc/init而不是像Java,C++等新的一样好奇,请查看这个SO问题.