它是正确的/ ellegant只使用alloc而没有init吗?

时间:2010-11-03 10:16:29

标签: iphone objective-c cocoa-touch memory-management init

如果我们不想在我们的类中实现init方法,并且记住NSObject中的init只返回对象的实例而没有初始化,我看不到调用init的意义,如果我们已经得到了带有alloc的实例。我已经尝试过并且有效,但我不确定它是否会导致未来的问题。

myClass *newObject = [myClass alloc];

而不是:

myClass *newObject = [[myClass alloc] init];

非常感谢。

4 个答案:

答案 0 :(得分:16)

不,只是调用alloc不正确。 alloc将对象的所有实例变量清零,init然后有机会将所有或某些实例变量设置为其默认值。有些类甚至使用他们的init方法创建另一个实例并返回一个实例而不是你分配的实例。

许多课程期望调用他们的init方法,如果不调用init,可能会导致崩溃。如果您正在讨论直接从NSObject继承并且不需要初始化实例变量的自定义类,那么您可能会使用[myClass alloc],但它绝对不是很好的编程风格。

答案 1 :(得分:2)

我认为这不是一个好主意 阅读Cocoa设计模式,特别是“两阶段创作”

您还可以阅读这篇文章http://www.informit.com/articles/article.aspx?p=1398610

答案 2 :(得分:0)

我认为如果你没有实现“ - (id)init”并不重要,因为如果你这样做,你会调用NSObject的init方法,它只返回你发送给方法的相同值。虽然最好创建自己的init方法来设置实例变量。

答案 3 :(得分:0)

在运行时源代码中 执行-(id)init将调用_objc_rootInit(self)并返回self。我猜只执行初始化就可以。