当我们在NSObject
类中实现(id)initWithCoder:(NSCoder *)decoder
方法时,我们需要调用[super **init**]
,但在UIView
中,我们需要以某种方式调用[super **initWithCoder:decoder**]
。为什么会有这样的区别?这个问题不是重复的,因为它涉及在这种特殊情况下对NSCoder的协议一致性。很可能还有其他类的情况与问题中指定的类似。
对于任何将已经符合NSCoding
协议的类划分为子类的类,都应该调用[super initWithCoder:decoder];
。
在直接扩展NSObject
的类的情况下,当然不能调用[super initWithCoder:decoder];
,因为NSObject
不符合NSCoder
,因此没有可以从子类调用的initWithCoder:
。所以您必须调用其他init
方法。
对于扩展UIView
的自定义视图,您可以调用它,因为UIView
符合NSCoding
。