1.创建uiAppliction
UIApplication
对象介绍:
1 > 一个 UIApplication 代表是一个应用程序,而且是单例的。
** 用来封装整个应用程序的一个对象 , 比如当应用程序执行到某个时期要做什么 , 生命周期等。
1 > 一个 UIApplication 代表是一个应用程序,而且是单例的。
** 用来封装整个应用程序的一个对象 , 比如当应用程序执行到某个时期要做什么 , 生命周期等。
2> 获取UIApplication对象: [UIApplication sharedApplication];(单例的)
2.当一个iOS程序启动后,首先创建的第一个对象就是UIApplication
对象。
3.利用UIApplication可以做一些应用界别的操作
4
>
利用
UIApplication
可以做一些应用级别的操作。
* 应用级别操作:
1 > QQ 有消息的时候右上角的消息条数。
// 获取 UIApplication 对象。
UIApplication *app = [UIApplication sharedApplication];
// 设置右上角 , 有 10 条消息
app.applicationIconBadgeNumber = 10 ;
// 取消显示消息
* 应用级别操作:
1 > QQ 有消息的时候右上角的消息条数。
// 获取 UIApplication 对象。
UIApplication *app = [UIApplication sharedApplication];
// 设置右上角 , 有 10 条消息
app.applicationIconBadgeNumber = 10 ;
// 取消显示消息
app.applicationIconBadgeNumber = 0;
4.联网操作是,状态栏上的等待图片的指示器
2
>
联网操作时,状态栏上的等待图标指示器。
waiting
图标。
UIApplication *app = [UIApplication sharedApplication];
UIApplication *app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible = YES;
5.利用UIApplication打开某个资源网站
3
>
利用
UIApplication
打开某个资源:
** 系统会自动根据协议识别使用某个 app 打开。
UIApplication *app = [UIApplication sharedApplication];
** 打开一个网页 :
[app openURL:[NSURL URLWithString: @"http://ios.icast.cn" ]];
** 打电话
[app openURL:[NSURL URLWithString: @"tel://10086" ]];
** 发短信
[app openURL:[NSURL URLWithString: @"sms://10086" ]];
** 发邮件
[app openURL:[NSURL URLWithString: @"mailto://12345@qq.com" ]];
** 使用 openURL 方法也可以打开其他应用,在不同应用之间互相调用对方。
** 美图秀秀 , 点击分享到 " 新浪微博 " , 打开 " 新浪微博 " 选择账号 , 跳转回 " 美图秀秀 " , 开始分享
** 喜马拉雅 , 使用微博、 QQ 账号 登录。都需要应用程序间跳转。
** 系统会自动根据协议识别使用某个 app 打开。
UIApplication *app = [UIApplication sharedApplication];
** 打开一个网页 :
[app openURL:[NSURL URLWithString: @"http://ios.icast.cn" ]];
** 打电话
[app openURL:[NSURL URLWithString: @"tel://10086" ]];
** 发短信
[app openURL:[NSURL URLWithString: @"sms://10086" ]];
** 发邮件
[app openURL:[NSURL URLWithString: @"mailto://12345@qq.com" ]];
** 使用 openURL 方法也可以打开其他应用,在不同应用之间互相调用对方。
** 美图秀秀 , 点击分享到 " 新浪微博 " , 打开 " 新浪微博 " 选择账号 , 跳转回 " 美图秀秀 " , 开始分享
** 喜马拉雅 , 使用微博、 QQ 账号 登录。都需要应用程序间跳转。
7.UIApplicationMain函数介绍.
6. UIApplicationMain 函数介绍。
/**
方法名 :
参数介绍
:
argc :使用 main 函数的 argc 即可
argv :使用 main 函数的 argv 即可
principalClassName :指定应用程序类名( app 的象征),该类必须是 UIApplication( 或子类 ) ,如果为 nil ,则用 UIApplication 类作为默认值
delegateClassName :指定应用程序的代理类, UIApplicationDelegate 协议中定义的方法,在该类中实现 .
UIApplicationMain 函数会:
1> 根据 principalClassName 创建 UIApplication 对象
2> 根据 delegateClassName 创建一个 delegate 对象,并将该 delegate 对象赋值给 UIApplication 对象中的 delegate 属性
程序正常退出时 UIApplicationMain 函数才返回
默认调用方式 :
UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
等价于
UIApplicationMain(argc, argv, @"UIApplication", @"AppDelegate");
** 代理参数必须传递 , 如果传 nil, 则显示 " 黑屏 " 。
argc :使用 main 函数的 argc 即可
argv :使用 main 函数的 argv 即可
principalClassName :指定应用程序类名( app 的象征),该类必须是 UIApplication( 或子类 ) ,如果为 nil ,则用 UIApplication 类作为默认值
delegateClassName :指定应用程序的代理类, UIApplicationDelegate 协议中定义的方法,在该类中实现 .
UIApplicationMain 函数会:
1> 根据 principalClassName 创建 UIApplication 对象
2> 根据 delegateClassName 创建一个 delegate 对象,并将该 delegate 对象赋值给 UIApplication 对象中的 delegate 属性
程序正常退出时 UIApplicationMain 函数才返回
默认调用方式 :
UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
等价于
UIApplicationMain(argc, argv, @"UIApplication", @"AppDelegate");
** 代理参数必须传递 , 如果传 nil, 则显示 " 黑屏 " 。
*/
10.IOS程序启动过程
1
>
打开程序。
2 > 调用 main 函数。
3 > 在 main 函数中调用 : UIApplicationMain() 函数。
* 在 UIApplicationMain() 函数中 :
1. 创建 UIApplication 对象
2. 创建 AppDelegate 代理对象
3. 将 AppDelegate 代理对象设置给 UIApplication 对象。
4. 在 UIApplicationMain() 函数开启一个 " 死循环(事件循环) " , 所以程序不会退出 , 我们可以任意使用。在这个 " 死循环(事件循环) " 中程序不断监听用户的各种事件 , 依次处理(依靠 " 事件队列 " 实现)。
5. 程序启动完毕 : 触发 application:didFinishLaunchingWithOptions 事件。
在此方法中创建了 application 对象和它的代理对象 , 并设置了 application 的代理对象 , 开启消息循环。在消息循环中不断监测 消息队列 中是否有新的事件 ( 队列是先进先出 )( 事件队列的目的是为了提高性能 ) ( 消息循环可以简单理解为一个死循环 , 当系统有事件被触发 , 事件所执行的方法会放入消息队列中 , 消息循环的作用就是不停的去消息 队列中看有没有新的消息 , 有就执行 , 用户感觉不到等待的时间 )
// 先检查 info.plist 文件中是否有 principalClassName 键 , 如果没有的话 UIApplicationMain 中的 principalClassName 参 数 , 会默认被指定为 UIApplication , 代理类的会被初始化
2 > 调用 main 函数。
3 > 在 main 函数中调用 : UIApplicationMain() 函数。
* 在 UIApplicationMain() 函数中 :
1. 创建 UIApplication 对象
2. 创建 AppDelegate 代理对象
3. 将 AppDelegate 代理对象设置给 UIApplication 对象。
4. 在 UIApplicationMain() 函数开启一个 " 死循环(事件循环) " , 所以程序不会退出 , 我们可以任意使用。在这个 " 死循环(事件循环) " 中程序不断监听用户的各种事件 , 依次处理(依靠 " 事件队列 " 实现)。
5. 程序启动完毕 : 触发 application:didFinishLaunchingWithOptions 事件。
在此方法中创建了 application 对象和它的代理对象 , 并设置了 application 的代理对象 , 开启消息循环。在消息循环中不断监测 消息队列 中是否有新的事件 ( 队列是先进先出 )( 事件队列的目的是为了提高性能 ) ( 消息循环可以简单理解为一个死循环 , 当系统有事件被触发 , 事件所执行的方法会放入消息队列中 , 消息循环的作用就是不停的去消息 队列中看有没有新的消息 , 有就执行 , 用户感觉不到等待的时间 )
// 先检查 info.plist 文件中是否有 principalClassName 键 , 如果没有的话 UIApplicationMain 中的 principalClassName 参 数 , 会默认被指定为 UIApplication , 代理类的会被初始化
4> 程序退出。
9.UIWindow对象
1.简介
8.
UIWindow
对象。
** UIWindow 是一种特殊的 UIView, UIWindow 也是继承自 UIView 。
** 通常一个 app 只会有一个 UIWindow 对象。
** iOS 程序启动完毕后,创建的第一个视图控件就是 UIWindow ,接着创建控制器的 view ,最后将控制器的 view 添加到 UIWindow 上,于是控制器的 view 就显示在屏幕上了
** 一个 iOS 程序之所以能显示到屏幕上,完全是因为它有 UIWindow
** 在文档中找 : Cocoa Touch Layer -> UIKit -> Guides -> View Controller Programming Guide for iOS -> View Controller Basics -> 关于 UIWindow 与控制器 View 的关系图片。
** UIWindow 是一种特殊的 UIView, UIWindow 也是继承自 UIView 。
** 通常一个 app 只会有一个 UIWindow 对象。
** iOS 程序启动完毕后,创建的第一个视图控件就是 UIWindow ,接着创建控制器的 view ,最后将控制器的 view 添加到 UIWindow 上,于是控制器的 view 就显示在屏幕上了
** 一个 iOS 程序之所以能显示到屏幕上,完全是因为它有 UIWindow
** 在文档中找 : Cocoa Touch Layer -> UIKit -> Guides -> View Controller Programming Guide for iOS -> View Controller Basics -> 关于 UIWindow 与控制器 View 的关系图片。
** 创建过程UIWindow -> UIViewController -> UIView -> 把UIView加到UIWindow对象中。
1.显示 UIWindow
8.
显示
UIWindow
(
[
self
.window makeKeyAndVisible]
)。
2.创建window并显示出来
- (
BOOL
)application:(
UIApplication
*)application didFinishLaunchingWithOptions:(
NSDictionary
*)launchOptions {
// 实例化一个 window 的大小
self . window = [[ UIWindow alloc ] initWithFrame :[ UIScreen mainScreen ]. bounds ];
self . window . backgroundColor = [ UIColor greenColor ];
// 创建一个 UIViewcontroller 处理器
UIViewController *rem = [[ UIViewController alloc ] init ];
rem. view . backgroundColor = [ UIColor grayColor ];
// 添加控制器到 window 上
self . window . rootViewController = rem;;
// 让 window 显示出来
[ self . window makeKeyAndVisible ];
// 实例化一个 window 的大小
self . window = [[ UIWindow alloc ] initWithFrame :[ UIScreen mainScreen ]. bounds ];
self . window . backgroundColor = [ UIColor greenColor ];
// 创建一个 UIViewcontroller 处理器
UIViewController *rem = [[ UIViewController alloc ] init ];
rem. view . backgroundColor = [ UIColor grayColor ];
// 添加控制器到 window 上
self . window . rootViewController = rem;;
// 让 window 显示出来
[ self . window makeKeyAndVisible ];
return YES;
}
3. 总结
UIwindow就一个作用"显示界面” 将来是通过切换不同的控制器View分别显示UIWindow上
4.没有SB文件的原理
1.
调用
main
函数。
2. 调用 UIApplicationMain 函数。
3. 创建 UIApplication 对象 、 AppDelegate 对象
4. 设置 UIApplicatio 对象的代理是 AppDelegate 对象。
5. AppDelegate 对象开始监听 " 系统事件(应用程序的事件) " , 进入 " 事件循环 " 。
6. 程序启动完毕后调用 application: didFinishLaunchingWithOptions: 方法。
7. 在 application: didFinishLaunchingWithOptions: 方法中手动创建 :
* UIWindow
* 控制器
* 设置 UIWindow 的根控制器是刚才创建的控制器
2. 调用 UIApplicationMain 函数。
3. 创建 UIApplication 对象 、 AppDelegate 对象
4. 设置 UIApplicatio 对象的代理是 AppDelegate 对象。
5. AppDelegate 对象开始监听 " 系统事件(应用程序的事件) " , 进入 " 事件循环 " 。
6. 程序启动完毕后调用 application: didFinishLaunchingWithOptions: 方法。
7. 在 application: didFinishLaunchingWithOptions: 方法中手动创建 :
* UIWindow
* 控制器
* 设置 UIWindow 的根控制器是刚才创建的控制器
* 显示UIWindow