我想知道我们何时在项目中使用“init”方法?我见过很多没有它的项目,他们使用“applicationDidFinishLaunching”启动应用程序,但不是init方法,你对此有什么想法吗?
非常感谢
答案 0 :(得分:3)
init
方法用于在分配对象后初始化对象。
如果未定义,则调用基类实现,与Objective-C中的任何其他方法一样,如果基类没有init
方法,则基类'基类'{{ 1}}将被调用,依此类推,直到init
的{{1}},这肯定是提供的。
如果您没有声明NSObject
方法,那么您将无法正确初始化班级中的ivars(如果有)。
关于init
,这是一个非常特殊的类的方法,任何Cocoa / iOS应用程序都有它的应用程序委托。例如:
init
(N.B。:applicationDidFinishLaunching
也可以 @interface myAppDelegate : NSObject <UIApplicationDelegate> {
...
}
)
如您所见,此类派生自NSObject,因此,它将由框架通过调用该类中定义的UIApplicationDelegate
方法(具体取决于框架)来实现。然后,在某些时候,框架将调用NSApplicationDelegate
方法,您可以更改初始化所有代理的成员,并执行启动应用程序所需的任何操作。
在这种情况下,您不需要在init
方法中但在applicationDidFinishLaunching
中进行初始化,这与您的UIApplication(或NSApplication)对象与其之间的特定交互模式有关。代表。 Apple以这种方式定义了这种模式;
您在MainWindow.xib中指定了应用程序委托类,或者在init
中调用applicationDidFinishLaunching
;
框架负责实例化那些类(以程序员不需要处理的自定义方式)并调用UIApplicationMain
,以便您可以随意使用它。
我希望这个解释可以帮助您了解应用委托代理的内容以及您未声明main.c
方法的原因。
答案 1 :(得分:1)
除非您想要进行一些自定义初始化,否则不需要实现 init 方法。
Doc说,
子类应覆盖init方法以添加特定于类的初始化代码。 init的子类版本需要为它们继承的类合并初始化代码,通过消息发送到 super: