NSCoder,NSObject与UIView

时间:2015-11-09 19:30:52

标签: ios objective-c nscoder

当我们在(id)initWithCoder:(NSCoder *)decoder课程中实施NSObject方法时,我们需要调用[super **init**],但在UIView我们需要调用[super **initWithCoder:decoder**]。为什么会有这样的差异? 问题不是重复,因为它涉及在这种特殊情况下协议与NSCoder的一致性。可能存在类似于问题中指定的其他类的情况。

1 个答案:

答案 0 :(得分:3)

您应该为任何已经符合[super initWithCoder:decoder];协议的类的子类调用NSCoding

如果某个类直接延伸NSObject,那么您当然无法调用[super initWithCoder:decoder];,因为NSObject不符合NSCoder,因此不会你可以从子类调用initWithCoder:。因此,您必须调用其他init方法。

如果自定义视图延伸UIView,您可以调用它,因为UIView符合NSCoding