Axe*_*xel 3 iphone xcode initialization objective-c
作为Objective-C初学者,我对init函数以及如何以及何时覆盖它非常困惑.所以这里有几个问题:
请注意我知道语法:
if ((self = [super init]))
{
_foo = [[Bar alloc] init];
}
return self;
Run Code Online (Sandbox Code Playgroud)
每个"初始化":
类通常为其对象实现初始化程序,但不是必需的.如果一个类没有实现初始化器,Cocoa会调用该类最近的祖先的初始化器.但是,子类通常定义自己的初始化程序或覆盖其超类的初始化程序以添加特定于类的初始化.如果一个类确实实现了初始化器,那么它应该调用其超类的初始化器作为第一步.此要求确保从继承链向下对象的一系列初始化,从根对象开始.在
NSObject类声明的init方法的默认对象初始化,所以它总是调用最后,但首先返回.
如上所述,当您需要在初始化完成后进行初始化时,可以覆盖超类的指定初始化程序.不需要这样做?然后你不需要覆盖.
当您的对象从NIB实例化时,-init不会被调用.相反,新分配的对象将根据对象的类型接收-initWithCoder:或-initWithFrame:消息.NIB加载过程-awakeFromNib在其后发送您的对象,并且已经建立了它引用的所有其他NIB创建的对象.这样可以避免覆盖-initWithCoder:/ -initWithFrame:在加载NIB后希望进行某些配置.如果您可以通过覆盖-awakeFromNib而不是初始化程序来执行您想要执行的操作,那么您应该这样做.
另请参阅"多个初始化器",它解释了"指定的初始化器"概念以及不同类如何具有不同的指定初始化器,以及"分配和初始化对象",以便对不太友好但更深入地描述所采用的分配和初始化约定. Objective-C的.
| 归档时间: |
|
| 查看次数: |
1684 次 |
| 最近记录: |