NSCoder、NSObject 与 UIView

NSCoder, NSObject vs UIView

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

您应该为任何 class 调用 [super initWithCoder:decoder];,子 class 是一个已经符合 NSCoding 协议的 class。

如果 class 直接扩展 NSObject 那么你当然不能调用 [super initWithCoder:decoder]; 因为 NSObject 不符合 [=15] =] 因此没有 initWithCoder: 可以从 subclass 调用。所以你必须调用其他一些 init 方法。

在扩展 UIView 的自定义视图的情况下,您调用它是因为 UIView 符合 NSCoding