NSCoder、NSObject 与 UIView
NSCoder, NSObject vs UIView
当我们在NSObject
class中实现(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
。
当我们在NSObject
class中实现(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
。