使用UIApplicationDidFinishLaunchingNotification

在应用程序完成启动后立即发布。

这就是Apple文档所说的。 但是我没有看到对象如何收到此通知。 它必须将自己添加为观察者,但最早可以在application:didFinishLaunchingWithOptions:执行此操作application:didFinishLaunchingWithOptions:方法。 那时,通知已经发布。 我看不出这个通知有什么用处,或者我忽略了什么?

假设您在“主Nib文件”的根目录中有一个“MyController”类的对象(在目标的属性中指定 – 默认名称为“MainWindow.xib”)。 当您的应用程序启动并加载此主nib文件时,nib文件中的所有对象都会收到-awakeFromNib方法,包括MyController实例。 在那里,实例可以将自己添加为UIApplicationDidFinishLaunchingNotification的观察者。 当主Nib文件的加载完成(以及其他一些启动内容),并且UIApplicationDelegate收到-application:didFinishLaunchingWithOptions:消息时,您的MyController实例会收到通知。

另一个(可能不是很常见)注册此通知的情况是,如果您在调用UIApplicationMain()之前直接在main.m文件中实例化了一些Objective-C类,并想知道您的应用程序实际启动的时间。

如果你有类或类别在+load中初始化自己,他们也可以利用这个机会等待UIApplicationDidFinishLaunchingNotification 。 这样,某些对象可以执行各种级别的“自动”行为,而无需将任何代码插入到应用程序的委托中。

你为什么需要寻找这个通知?

当然,您可以从应用程序中调用您想要的任何方法:didFinishLaunchingWithOptions:method。

接收此通知的委托对象将在加载应用程序.xib文件期间进行实例化并注册为应用程序委托。 如果要在加载.xibs后进行其他设置,可以在此处执行此操作。

有时它只是方便。

你可以让控制器自己负责响应生命周期事件(比如变为非活动状态,进入后台等),而不是让你的代表,呃,委托一切,从而形成一个伟大的依赖毛球。