【发布时间】:2011-07-18 10:43:44
【问题描述】:
我想知道我们什么时候在项目中使用“init”方法?我见过很多没有它的项目,他们使用“applicationDidFinishLaunching”来启动应用程序,而不是init方法,你知道吗?
非常感谢
【问题讨论】:
标签: iphone objective-c ios init
我想知道我们什么时候在项目中使用“init”方法?我见过很多没有它的项目,他们使用“applicationDidFinishLaunching”来启动应用程序,而不是init方法,你知道吗?
非常感谢
【问题讨论】:
标签: iphone objective-c ios init
init 方法用于在分配对象后对其进行初始化。
如果未定义,则调用基类实现,与 Objective-C 中的任何其他方法一样,如果基类没有init 方法,则基类'基类'init 将被调用,依此类推,直到NSObject 的init,这是肯定提供的。
如果您不声明 init 方法,那么您将无法正确初始化您的类中的 ivars(如果有的话)。
关于applicationDidFinishLaunching,这是任何Cocoa/iOS 应用程序都有的一个非常特殊的类的方法,它的应用程序委托。例如:
@interface myAppDelegate : NSObject <UIApplicationDelegate> {
...
}
(注:UIApplicationDelegate 也可以是 NSApplicationDelegate)
如您所见,该类派生自 NSObject,因此,它将由框架通过调用该类中定义的 init 方法(具体取决于框架)来初始化。然后,在某个时候,框架将调用applicationDidFinishLaunching 方法,您可以进行更改以初始化所有代理的成员并执行启动应用程序所需的任何操作。
在这种情况下,您不需要在 init 方法中而是在 applicationDidFinishLaunching 中进行初始化这一事实与您的 UIApplication(或 NSApplication)对象与其委托之间的特定交互模式有关。这种模式是苹果这样定义的;
您在 MainWindow.xib 中或在 main.c 中调用 UIApplicationMain 时指定应用程序委托类;
框架负责实例化这些类(以程序员不需要处理的自定义方式)并调用applicationDidFinishLaunching,以便您可以用它做任何您需要的事情。
我希望这个解释可以帮助您了解应用程序委托发生了什么以及您为什么不声明 init 方法。
【讨论】:
nil,但我认为为了可读性和可维护性,如果你有 ivars,你最好定义一个init 方法。另请阅读我对“交互”部分的编辑...
实现 init 方法是不必要的,除非你想做一些自定义初始化。
Doc 说,
子类应覆盖 init 方法以添加特定于类的初始化代码。 init 的子类版本需要通过向 super:
发送消息来合并它们所继承的类的初始化代码
【讨论】: