创建子类时,继承初始值设定项是一个问题。有时,超类init ...方法会充分初始化类的实例。但是因为它更有可能不会,你应该覆盖超类的初始化器。如果不这样做,则会调用超类的实现,并且因为超类对您的类一无所知,所以您的实例可能无法正确初始化。
在同一页面上,我找到了这个文字:
声明实例变量的每个对象都应该实现一个初始化方法 - 除非默认的set-everything-to-zero初始化足够。
我的问题是: 如果我跳过B类中的init方法,其中B类继承自A,我可以相信B的非继承成员变量被设置为零吗?
答案 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方法中设置的任何值(如果未设置则为零)。