最近有人告诉我,Apple 不鼓励使用 new,而 google 的 iOS 编码标准也有这样的说法:
不要调用 NSObject 类方法 new,也不要在子类中覆盖它。相反,使用 alloc 和 init 方法来实例化保留对象。现代 Objective-C 代码显式调用 alloc 和 init 方法来创建和保留对象。由于很少使用新的类方法,因此检查代码以进行正确的内存管理变得更加困难。
为什么它会使审查代码以进行正确的内存管理变得更加困难?
最近有人告诉我,Apple 不鼓励使用 new,而 google 的 iOS 编码标准也有这样的说法:
不要调用 NSObject 类方法 new,也不要在子类中覆盖它。相反,使用 alloc 和 init 方法来实例化保留对象。现代 Objective-C 代码显式调用 alloc 和 init 方法来创建和保留对象。由于很少使用新的类方法,因此检查代码以进行正确的内存管理变得更加困难。
为什么它会使审查代码以进行正确的内存管理变得更加困难?
我希望对代码审查的简单性的引用仅仅意味着你的代码的人类读者可能不会注意到“新”这个词,因为他们的眼睛扫描代码以寻找 alloc-init 调用。
在 Objective-C 中,单词“new”是调用 alloc 和 init 的快捷方式。但是你不能传递参数;您正在调用无参数构造函数。如果您稍后更改您的代码,以便现在要调用其他构造函数之一并传递参数,则需要将“new”更改为 alloc-init。这很常见,这也是避免首先调用“新”的另一个原因。
调用“new”比调用 alloc-init 没有任何优势。'new' 词只在 Objective-C 中出现,因为其他语言(如 Java)使用该关键字。