iphone - InitWithCoder,[super init] 还是 [super initWithCoder]?

标签 iphone objective-c cocoa-touch

请问我应该使用哪个版本,在我的旧应用程序中我似乎使用“B”但是当我在网上查看很多示例时我看到很多看起来像“A”的版本。

// A
- (id)initWithCoder:(NSCoder *)decoder {
    self=[super initWithCoder:decoder];
    if(self) {
        ...

// B
- (id)initWithCoder:(NSCoder *)decoder {
    self=[super init];
    if(self) {
        ...

最佳答案

取决于父类(super class)是否符合NSCoding 协议(protocol)。如果是,则必须调用 [super initWithCoder:decoder]。如果没有,则必须调用父类(super class)的指定初始化程序。

例如,如果你的类是NSObject的直接子类,你会调用[super init]NSObject的指定初始化器, 因为 NSObject 不符合 NSCoding 协议(protocol)。

关于iphone - InitWithCoder,[super init] 还是 [super initWithCoder]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6820415/

相关文章:

iphone - 在绘制之前设置 CGLayer 的 "opacity"?

iphone - iPad 应用程序 UITableView 委托(delegate)方法没有被调用

iphone - iOS 无法以编程方式设置元素位置

ios - 以编程方式滑动 UIScrollView

iphone - 设置 iPhone 键盘语言

php - 集成 PHP 脚本和 iPhone 应用程序?

IOS 8 iPad 仅制作 Launch Screen 人像

php - 通过 NSURLRequest 将音频文件发布到 Web 服务器并将其取回的问题

ios - 在 Singleton 中用自己的 setter 覆盖属性

iphone - UIActivityIndi​​catorView 未对齐