Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么我们需要覆盖超类';指定初始化_Ios_Objective C - Fatal编程技术网

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

Ios 为什么我们需要覆盖超类';指定初始化,ios,objective-c,Ios,Objective C,在Aaron Hillegass的Objective-C编程书中,他给出了一些编写自定义init方法的规则。其中一条规则是“如果类的指定初始值设定项与其超类的指定初始值设定项不同,则必须重写超类的指定初始值设定项,以便它调用(新类的)新指定初始值设定项” 为什么这是强制性的。我看到的唯一问题是,在您使用setter显式初始化它们之前,类中的任何实例变量都将被初始化为null。这有什么问题?这是因为类的每个初始值设定项都必须经过该类的指定初始值设定项,从而确保所有常见设置都发生在一个地方。即使是超

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


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

这是因为类的每个初始值设定项都必须经过该类的指定初始值设定项,从而确保所有常见设置都发生在一个地方。即使是超类“指定的初始值设定项”也应该经过您的子类,如果您将其指定,否则在指定的初始值设定项中发生的设置可能会被调用其他初始值设定项的天真客户端错过。

因为它确保对象的所有init都必须调用您的类指定的初始值设定项。如果不重写其超类的指定初始值设定项,如果当前类(您的自定义类)使用一个super的initial(指定的或方便的)方法初始化,会发生什么?您指定的首字母从未打过电话

您是否浏览过此链接,我想答案是:-谢谢,是的,有。看来没有共识!“即使是超类‘指定的初始值设定项’也应该经过你的子类‘一’。”你的意思不是相反吗?如中所述,子类的指定初始值设定项应通过(调用)其超类的指定初始值设定项?当重写超类的“指定初始值设定项”时,它应调用子类的“一”,当实现子类的“指定初始值设定项”时,它应单独调用超类的“一”。