是否以init方法开始?

时间:2011-07-18 10:43:44

标签: iphone objective-c ios init

我想知道我们何时在项目中使用“init”方法?我见过很多没有它的项目,他们使用“applicationDidFinishLaunching”启动应用程序,但不是init方法,你对此有什么想法吗?

非常感谢

2 个答案:

答案 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以这种方式定义了这种模式;

  1. 您在MainWindow.xib中指定了应用程序委托类,或者在init中调用applicationDidFinishLaunching;

  2. 框架负责实例化那些类(以程序员不需要处理的自定义方式)并调用UIApplicationMain,以便您可以随意使用它。

  3. 我希望这个解释可以帮助您了解应用委托代理的内容以及您未声明main.c方法的原因。

答案 1 :(得分:1)

除非您想要进行一些自定义初始化,否则不需要实现 init 方法。

Doc说,

  

子类应覆盖init方法以添加特定于类的初始化代码。 init的子类版本需要为它们继承的类合并初始化代码,通过消息发送到 super: