当覆盖的initWithCoder是它总是需要调用[超级的initWithCoder:编码器]

问题描述:

在这段代码中,我从一个的.xib加载视图控制器(以及相关的视图):当覆盖的initWithCoder是它总是需要调用[超级的initWithCoder:编码器]

-(id)initWithCoder:(NSCoder *)coder 
    { 
    // add custom initialisation code here 
    [super initWithCoder:coder]; 
    return self; 
    } 

这个成功的作品,但我真的不明白线[super initWithCoder:coder]正在完成什么。初始化我的视图控制器后,我的视图已被初始化?

请在解释时尽可能明确。谢谢。

+0

只是为了记录,如果你是新来的这个东西。 (1)有时候(并非总是)你碰巧想**在**类的“设置”中添加一些东西,当它启动时。 (2)**如果你碰巧需要这样做,那么你的方式就是使用与上述完全相同的代码。但是请注意,(3)上面的代码实际上什么都不做。实际上,非常简单,它只不过是一个**例子,如果您需要为所讨论的课程“添加设置代码”,您将为此类特定类型做什么**。 (事实上​​,你会“在第3行之前添加新的设置代码”)。有意义吗?! :) – Fattie 2014-03-09 14:27:01

你的课是UIViewController的一个子类。该电话会告诉您的超级班(UIViewController)执行完成所需的步骤,以便您可以执行初始步骤。这将设置UIViewController提供或注册UIViewController需要完成其工作的通知的任何属性。

建议几乎每次你从超类中重写一个方法来调用超类的方法以及你需要采取的步骤。

编辑:另外,如果您不需要在超类提供的方法中执行任何操作,您可以将其忽略并使用超类的方法。在这种情况下,我不会提供initWithCoder:方法,除非您展示的内容除了需要执行某些代码外。

+0

只需要明确一点,当我向UIViewController.xib添加一个UIView对象时,Interface Builder会自动从UIViewController中继承我的UIView类?我确实看到,如果我从我的UIView自定义类中排除initWithCoder,那么一切都会正常加载,这是一个有用的提示。 – Evan 2010-03-12 19:46:19

+0

仅当IB中的Identity Inspector中的子类名称(在Custom Class下)配置.xib中的UI View对象时,才会创建UIView子类的实例。 – rimsky 2012-01-16 18:00:10

+0

@JoeBlow寒... – LucasTizma 2015-01-23 23:02:06