如果我们不想在我们的类中实现 init 方法,并且记住 NSObject 中的 init 只返回一个没有初始化的对象实例,那么如果我们已经使用 alloc 获得了实例,我看不到调用 init 的意义. 我已经尝试过并且它有效,但我不确定它不会导致未来的问题。
myClass *newObject = [myClass alloc];
代替:
myClass *newObject = [[myClass alloc] init];
非常感谢。
如果我们不想在我们的类中实现 init 方法,并且记住 NSObject 中的 init 只返回一个没有初始化的对象实例,那么如果我们已经使用 alloc 获得了实例,我看不到调用 init 的意义. 我已经尝试过并且它有效,但我不确定它不会导致未来的问题。
myClass *newObject = [myClass alloc];
代替:
myClass *newObject = [[myClass alloc] init];
非常感谢。
不,只是打电话alloc
是不正确的。alloc
清零对象的所有实例变量,init
然后有机会将所有或部分实例变量设置为其默认值。一些类甚至使用它们的init
方法来创建另一个实例并返回那个实例而不是您分配的那个实例。
许多类期望它们的init
方法被调用,如果你不调用它们可能会导致崩溃init
。如果您谈论的是直接继承自NSObject
并且不需要初始化实例变量的自定义类,您可能会侥幸逃脱,[myClass alloc]
但这绝对不是好的编程风格。
我认为这不是一个好主意。
阅读 Cocoa 设计模式,尤其是“两阶段创作”
您也可以阅读这篇文章http://www.informit.com/articles/article.aspx?p=1398610
我认为如果你没有实现一个“-(id)init”并没有多大关系,因为如果你这样做了,你会调用 NSObject 的 init 方法,它只返回你发送给该方法的相同值。尽管创建自己的 init 方法来设置实例变量是个好主意。
在运行时源代码中执行-(id)init
将调用_objc_rootInit(self)
并返回self
. 我猜只执行init就可以了。</p>