0

我是 Objective-C 和 iOS 编程的新手。我已经阅读了一些 Apple 的“入门”文档,并下载了一些示例应用程序来尝试熟悉应用程序中发生的事情。我感到困惑的是应用程序启动后究竟发生了什么。我在 main.m 中看到 UIApplicationMain 被调用并调用 AppDelegate。根据我的阅读,现在,如果 applicationDidFinishLaunching 返回 true,则应用程序将进入主事件循环。

这一切都正确吗?如果是这样,我如何将我的代码与事件联系起来?当事件发生时,我在哪里创建我的类的实例?

最后,据我了解,Xcode 现在创建了所有带有故事板的模板应用程序。但是,我正在查看的一些应用程序有点旧并且不使用情节提要,但我在目录中的任何地方都看不到 .xib 或 .nib 文件,但应用程序成功构建。假设应用程序需要这些文件,我错了吗?

4

2 回答 2

2

应用程序不需要 .xib 或 .nib 即可运行。许多程序员不使用任何生成故事板或 .nib 文件的可视化设计工具。如果您愿意,您可以在代码中完全定义您的 UI。

main.m 中对 UIApplicationMain 的调用创建了一个单例 UIApplication 对象,设置了一个事件循环,并设置了与 UIApplication 协同工作的 UIApplicationDelegate,以便您可以在应用程序生命周期的关键点自定义应用程序的行为。UIApplication 为您管理事件循环。它从系统接收事件并将它们分派给您的代码进行处理。

为了真正理解事件处理,您需要了解响应者链。如果您查看应用程序委托的超类,您会看到它是 UIResponder。这是让对象响应和处理事件的接口。它是 UIApplication 和 UIView 的超类,为您处理大部分原始事件。事件在您的代码中遵循定义的路径。在最简单的情况下,触摸事件,UIApplication 从事件循环中弹出一个事件并将其交给 UIWindow。UIWindow 会执行一次命中测试,尝试将其直接传递到手指下的 UIView。它变得更加复杂,运动事件采用不同的路径,但关键是 UIKit 为您处理了大部分原始事件处理。你真正需要做的就是设置你的 UIWindow 和它的 rootViewController 和事件将通过你所有的 UIKit 响应者遵循一个特定的传递路径。您可以在此处详细了解响应者链https://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/event_delivery_responder_chain/event_delivery_responder_chain.html

于 2013-10-08T17:36:29.540 回答
0

当您的应用程序启动时,将按此顺序调用以下委托方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions;

- (void)applicationDidBecomeActive:(UIApplication *)application;

此外,您的初始视图控制器将被创建并显示,并且将调用以下方法(假设您使用的是故事板或 xib 文件):

-(void)viewDidLoad;

-(void) viewWillAppear:(BOOL)animated;

至于“将代码绑定到事件”,您在说什么类型的事件?你想达到什么目的?

如果您使用故事板,则不再需要使用 xib 文件,但是,如果您愿意,也可以使用。

于 2013-10-08T17:00:48.277 回答