当我们在(id)initWithCoder:(NSCoder *)decoder
课程中实施NSObject
方法时,我们需要调用[super **init**]
,但在UIView
我们需要调用[super **initWithCoder:decoder**]
。为什么会有这样的差异?
问题不是重复,因为它涉及在这种特殊情况下协议与NSCoder的一致性。可能存在类似于问题中指定的其他类的情况。
答案 0 :(得分:3)
您应该为任何已经符合[super initWithCoder:decoder];
协议的类的子类调用NSCoding
。
如果某个类直接延伸NSObject
,那么您当然无法调用[super initWithCoder:decoder];
,因为NSObject
不符合NSCoder
,因此不会你可以从子类调用initWithCoder:
。因此,您必须调用其他init
方法。
如果自定义视图延伸UIView
,您可以调用它,因为UIView
符合NSCoding
。