为什么我们需要覆盖超类'指定初始化程序

时间:2015-05-08 05:48:39

标签: ios objective-c

在Aaron Hillegass' Objective-C编程书,他给出了一些编写自定义init方法的规则。其中一条规则是"如果您的类的指定初始值设定项与其超类的指定初始值设定项不同,则必须覆盖超类'指定初始化程序,以便它调用新的指定初始化程序(新类)"

为什么这是强制性的。我看到的唯一问题是,在您使用setter显式初始化它们之前,类中的任何实例变量都将初始化为null。有什么问题?

2 个答案:

答案 0 :(得分:0)

这是因为类的每个初始值设定项都必须通过该类的指定初始值设定项,以确保所有常见设置都在一个地方进行。 甚至超类'指定的初始化程序应该通过你的子类'一,如果你指定它,否则你的指定初始化程序中发生的设置可能被天真的客户调用不同的初始化程序错过。

答案 1 :(得分:0)

因为它确保对象的所有init都必须调用您的类指定的初始化程序。如果没有覆盖其超类的指定初始化程序,如果当前类(您的自定义类)使用一个超级的初始(指定或方便)方法初始化会发生什么?你指定的首字母从未被称为