好的,可以在继承的类中跳过init方法吗?

时间:2012-09-27 19:36:35

标签: objective-c initialization

请考虑http://developer.apple.com/library/ios/#documentation/general/conceptual/CocoaEncyclopedia/Initialization/Initialization.html中的以下文字。

  

创建子类时,继承初始值设定项是一个问题。有时,超类init ...方法会充分初始化类的实例。但是因为它更有可能不会,你应该覆盖超类的初始化器。如果不这样做,则会调用超类的实现,并且因为超类对您的类一无所知,所以您的实例可能无法正确初始化。

在同一页面上,我找到了这个文字:

  

声明实例变量的每个对象都应该实现一个初始化方法 - 除非默认的set-everything-to-zero初始化足够。

我的问题是: 如果我跳过B类中的init方法,其中B类继承自A,我可以相信B的非继承成员变量被设置为零吗?

2 个答案:

答案 0 :(得分:2)

  

我的问题是:如果我跳过B类中的init方法,那么B类   继承自A,我可以相信B的非继承成员变量   设置为零?

Objective-C将set all ivars of any new object to zero

  

alloc方法为新对象动态分配内存   实例变量并将它们全部初始化为0-all,即除外   isa变量,用于将新实例连接到其类。为   对象有用,通常需要更完整   初始化。这是init方法的功能。

因此,如果您没有需要初始化的任何ivars /属性,可以跳过为您的类实现初始化方法。当然,您必须通过调用-init或其他一些初始化方法来初始化新对象,以便超类有机会初始化自己。

答案 1 :(得分:1)

是的,B类的非继承成员变量将为零。继承的变量将具有在A类的init方法中设置的任何值(如果未设置则为零)。

相关问题