gpt4 book ai didi

objective-c - Objective-C 的新功能

转载 作者:搜寻专家 更新时间:2023-10-30 19:57:27 24 4
gpt4 key购买 nike

我想这样做:

[[ClassA new] addObject:[[ClassA new] addObject:[ClassA new]]];

但是编译器返回:

"error: invalid use of void expression"

有办法吗?就像在 Java 中一样:

ClassA = new ClassA( new ClassA( new ClassA()));

最佳答案

真正的问题是 -[ClassA addObject:] 的返回类型很可能是 void,因此您不能将该表达式嵌套为外部 -addObject:调用。有关示例,请参阅 -[NSMutableArray addObject:] 的文档— 方法签名是 - (void) addObject:(id)anObject。如果您习惯了另一种语言(尤其是 Java)的不同行为,这可能会让您措手不及。还要注意 -removeObject: 返回 void,而不是被删除的对象。

此外,每个人都忽略了 +new 是继承的这一点,除非被覆盖 — 参见 +[NSObject new] .然而,使用 +new 是“过时的”,而 +alloc/-init... 是首选。一个原因是因为无论如何 +new 都会调用 -init,所以您必须创建一个 +new... 变体来匹配类中的每个 -init...。到那时,您会得到很多不必要的代码来解决非问题。我个人很少使用 +new,只有在我知道我只使用 -init 时才使用。

由于您有 Java 背景,请查看 this SO question如果你好奇为什么 Objective-C 使用 alloc/init 而不是 Java、C++ 等 new。

关于objective-c - Objective-C 的新功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1039511/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com