【问题标题】:NSCoder, NSObject vs UIViewNSCoder、NSObject 与 UIView
【发布时间】:2015-11-09 19:30:52
【问题描述】:

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

【问题讨论】:

标签: ios objective-c nscoder


【解决方案1】:

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

对于直接扩展NSObject 的类,当然不能调用[super initWithCoder:decoder];,因为NSObject 不符合NSCoder,因此没有initWithCoder:,你可以从子类调用。所以你必须调用其他一些init 方法。

对于扩展UIView 的自定义视图,您确实调用它是因为UIView 符合NSCoding

【讨论】:

    猜你喜欢
    • 2014-10-19
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多