iphone - 是否从 init 方法开始?

标签 iphone objective-c ios init

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

非常感谢

最佳答案

init 方法用于在分配对象后初始化对象。 如果未定义,则调用基类实现,就像 Objective-C 中的任何其他方法一样,如果基类没有 init 方法,则调用基类的基类' init 将被调用,依此类推,直到肯定提供了 NSObjectinit

如果您不声明 init 方法,那么您将无法正确初始化类中的 ivar(如果有的话)。

关于applicationDidFinishLaunching,这是一个非常特殊的类的方法,任何Cocoa/iOS 应用程序都有,它的应用程序委托(delegate)。例如:

 @interface myAppDelegate : NSObject <UIApplicationDelegate> {
 ...
 }

(注意:UIApplicationDelegate 也可以是 NSApplicationDelegate)

如您所见,此类派生自 NSObject,因此,框架将通过调用该类中定义的 init 方法(具体取决于框架)来初始化它。然后,在某个时候,框架将调用 applicationDidFinishLaunching 方法,您可以更改以初始化所有委托(delegate)的成员并执行启动应用所需的任何操作。

在这种情况下,您不需要在 init 方法中而是在 applicationDidFinishLaunching 中进行初始化这一事实与 UIApplication 之间的特定交互模式有关(或 NSApplication) 对象及其委托(delegate)。这个模式是Apple这样定义的;

  1. 您在 MainWindow.xib 中或在 main.c 中调用 UIApplicationMain 时指定您的应用程序委托(delegate)类;

  2. 框架负责实例化这些类(以程序员不需要处理的自定义方式)并调用 applicationDidFinishLaunching,这样您就可以用它做任何您需要的事情。

我希望这个解释能帮助您理解应用程序委托(delegate)发生了什么,以及为什么您不声明 init 方法。

关于iphone - 是否从 init 方法开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6731713/

相关文章:

iphone - 对 UISplitViewController 上的详细 View 之间的变化进行动画处理

android - 定点数学 - 从浮点安全到总是产生相同结果的转换?

iphone - 创建登录屏幕以链接到 iOS 应用程序中的表单

iphone - 如何设置 UIScrollView 的滚动位置?

javascript - 在 iphone 的 safari 中打开时记录网站的控制台消息

ios - 如何在 iOS swift 中使用 RealmSwift 创建类似 firebase 结构的模型?

ios - 扩展 NSAttributedString 问题

iphone - 异步调度递归 block

ios - 有没有办法使用相同的 cellForRowAtIndexPath 函数填充两个或多个不同的 UITableView?

objective-c - 将在线 GIF 图像加载到 NSImageView 中