您的位置:首页 > 移动开发

iOS从入门到精通---1.iOS开发App程序启动原理

2015-04-03 01:36 561 查看
前言:学习iOS开发是一件高大上的事情,但是再怎么高大上的事情,不付出努力,走马观花,始终都不会有什么收获,更不会有什么进步。要静下心来,慢慢学习,天天练习,把coding当做一件快乐有趣的事,而不是仅仅当做用来赚钱的工具,这样才能主动的去学习,才能有所收获,也有助于养成一个良好的心态!(写给大家,也写给自己)

----------------------------------------------------------------------

好的,废话少说,言归正传:

先看图,没图说个JJ




每次创建工程都有一大堆xcode默认创建的文件和文件夹,而我们平时都在这基础上直接创建各种viewController,然后哒哒哒的往下写,很少去理会这些默认创建的文件都是什么鬼有什么用,到头来也只是一知半解。

其他文件作用在这都不说了,网上一搜一大堆,今天主要剖析一下AppDelegate,总感觉这玩意儿很神秘有木有 ~ ~、

先忘掉xcode所创建的默认文件,按步骤来:

1.在HelloWorld启动过程中,首先调用main.m代码模块中的main()函数。(至于为什么调用main.m,我google了半天也没找到答案)

先看一下main.m中的内容:

#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char * argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}


一个Application(简称App)要想可以与用户交互,需要有一个 UIApplication 作为主体,接收各类 events,而且还要有一个 UIApplicationDelegate (UIApplication的代理)来处理所接收的events
。简单说,前者接收事件,后者处理事件。

所以,在main()函数中,int
UIApplicationMain(int argc,char
*argv[],NSString *principalClassName,NSString
*delegateClassName);函数中已经初始化了一个UIApplication(被苹果封装起来了,我们是看不到滴),所以这个还缺少一个代理,来处理UIApplication所接收的events,这时AppDelegate就大摇大摆的出来了。

2.看一下AppDelegate中的代码:



AppDelegate继承自UIResponder,并且遵守了<UIApplicationDelegate>协议

(咦,那如此说来,“AppDelegate”仅仅是一个类名,那它也可以起名为BppDelegate?
-------必须的啊,神秘感瞬间消失有木有)

UIResponder类使子类AppDelegate具有了处理相应事件(events)的能力,UIApplicationDelegate协议中有各种事件的回调:

UIApplicationDelegate协议中的部分方法如下:

@protocol UIApplicationDelegate<NSObject>
@optional
- (void)applicationDidFinishLaunching:(UIApplication *)application;
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- (void)applicationDidBecomeActive:(UIApplication *)application;
- (void)applicationWillResignActive:(UIApplication *)application;


这些方法会在应用生命周期的不同阶段会被调用。

程序执行步骤:程序启动 -> 执行main.m中的main()函数 -> 初始化UIApplication对象 并设置代理AppDelegate为其代理 -> AppDelegate接收事件回调
-> 然后就可以实现你自己的业务逻辑了

实际上:main.m中初始化了一个 UIApplication
对象 ,把AppDelegate设置为其代理来接收各种事件以供其驱使。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: