`
prevention
  • 浏览: 70142 次
社区版块
存档分类
最新评论

iOS Dev (38) 你不一定看到懂了 main.m 文件

 
阅读更多

iOS Dev (38) 你不一定看到懂了 main.m 文件

先看看代码

#import <UIKit/UIKit.h>

#import "AppDelegate.h"

int main(int argc, char * argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil,
        NSStringFromClass([AppDelegate class]));
    }
}

它都做了什么?

有两个重点,一个是自动释放池 autorelease pool。这个东东是 iOS5 引入 Auto Reference Counting 后加入的东东。要注意的是,这个货意味着对应一个线程(在这里,就是主线程)。而对于一个多线程的 Application,你应该再为其他线程准备 autorelease pool。

另一个重点,就是 UIApplicationMain。这东东最基本的功能,自然是创建一个 Application 对象。其次呢,它还会创建相应的委托对象(Delegate),Application 在应用出现相应状态变化时调用相应的协议方法。这货负责建立应用程序的事件循环(Event Loop),事件循环中可以不断接收交互操作,比如屏幕触摸手势、各类传感器(重力加速器、陀螺仪等)等。

为什么没看到 UIApplication 这货的实例?

我们知道,一个可以拿出来得瑟的应用,至少要有一个 UIApplication 作为主体,接收各类 events。而还要有一个 UIApplicationDelegate 来作为具体处理 events 的家伙。简单说,前者接收事件,后者处理事件。

接收事件这部分的代码,iOS 都帮你写好了,你只需要把如何处理事件的代码写出来就行了。UIApplicationMain 会自动创建 UIApplication,吼吼,这就是所谓“帮你写好了”。里面到底咋回事,你不用管。

你要做的,就是把 UIApplicationDelegate 搞定。工程创建好后,有一个 AppDelegate 这个货在那。这货的代码如下:

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@end

意思是不是很清楚啊。那么你看看 AppDelegate.m 文件,就知道这货都是如何处理事件的了(事实上,并没有啥代码,代码都被封装在了 UIApplicationDelegate 里)。


转载请注明来自大锐哥的博客:http://blog.csdn.net/prevention

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics