前言:学习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设置为其代理来接收各种事件以供其驱使。