正文

一 UIApplication

1.一个UIApplication代表是一个应用程序,而且是单例的。一个程序也只能有一个UIApplication对象

2.获取UIApplication对象: [UIApplication sharedApplication];

3.当一个iOS程序启动后,首先创建的第一个对象就是UIApplication对象然后是UIWindow 然后是控件

4.UIApplication可以做一些应用级别的操作:

1) QQ有消息的时候右上角的消息条数。

   // 获取UIApplication对象。
UIApplication *app = [UIApplication sharedApplication]; // 设置右上角, 有10条消息
app.applicationIconBadgeNumber = ; // 取消显示消息
app.applicationIconBadgeNumber = ;
/** 参考代码:
// 当点击按钮时, 设置右上角消息
- (IBAction)click:(id)sender { // 获取UIApplication对象
UIApplication *app = [UIApplication sharedApplication]; // iOS 8 系统要求设置通知的时候必须经过用户许可。
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil]; [app registerUserNotificationSettings:settings]; app.applicationIconBadgeNumber = 10; // 有10条消息 // app.applicationIconBadgeNumber = app.applicationIconBadgeNumber > 0 ? 0 : 10; // 有10条消息
} */

2) 联网操作时,状态栏上的等待图标指示器。waiting图标。

UIApplication *app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible = YES;

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方法也可以打开其他应用,在不同应用之间互相调用对方。
// ** 美图秀秀, 点击分享到"新浪微博", 打开"新浪微博"选择账号, 跳转回"美图秀秀", 开始分享

4) 通过UIApplication管理状态栏:

自从iOS7开始可以通过两种方式来控制状态栏

1> 控制器
                                    * 通过UIViewController管理(每一个UIViewController都可以拥有自己不同的状态栏)
                           
                                    * 需要在控制器中实现如下方法:
                                    /** 参考代码:
                                     // 是否隐藏"状态栏"
                                     - (BOOL)prefersStatusBarHidden
                                     {
                                        return NO;
                                     }
                                     
                                     // 状态栏的样式
                                     - (UIStatusBarStyle)preferredStatusBarStyle
                                     {
                                        // 白色
                                        return UIStatusBarStyleLightContent;
                                     }

*/
 2> UIApplication
                                    * 通过UIApplication管理(一个应用程序的状态栏都由它统一管理)
                           
                                    ** iOS7开始状态栏默认交给了控制器来管理,如果希望通过UIApplication来管理,步骤如下:
                                        1> 在Info.plist文件中增加一个配置项
                                             * View controller-based status bar appearance = NO,
                                   
                                        2>然后编写如下代码:

>然后编写如下代码:
/** 参考代码:
- (IBAction)click:(id)sender { UIApplication *app = [UIApplication sharedApplication]; // 设置状态栏是否隐藏
//app.statusBarHidden = YES;
// 动画的方式
//[app setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; // 设置状态栏显示为白色
// app.statusBarStyle = UIStatusBarStyleLightContent;
// 动画的方式
//[app setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
} */

二 AppDelegate中的若干方法介绍:
            * - (BOOL)application:didFinishLaunchingWithOptions:
              app加载完毕的时候调用

* - (void)applicationWillResignActive:
               app失去焦点的时候调用(失去焦点UI控件就不能正常使用了, 然后app就可以进入后台了)

* - (void)applicationDidEnterBackground:
               app进入后台的时候调用(app消失不见)

* - (void)applicationWillEnterForeground:
               app进入前台的时候调用(app显示出来)

* - (void)applicationWillTerminate:
               app终结, app关闭的时候调用(但一般情况下不会调用).
               注意: 当一个应用进入后台(休眠)状态下时, 然后再关闭该应用, 并不会调用applicationWillTerminate:
方法。原因: 当应用进入"休眠"状态下的时候是无法接收任何事件的(比如关闭)。但是有些应用在进入后台的时候, 并不休眠(比如"音乐播放器"、"QQ"等。要实现这种效果需要在"info.plist"中增加一个配置: 配置该应用的类型。 )参考:http://www.cnblogs.com/tracy-e/p/3151457.html

** 在上面的四个代理方法中输出一句话, 验证执行顺序。

三 UIApplicationMain

/**
        方法名:
        int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);
        
        参数介绍:
        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, 则显示"黑屏"。
        
        */

iOS程序启动过程。
             1> 打开程序。
                           
             2> 调用main函数。
                           
             3> 在main函数中调用:  UIApplicationMain()函数。
                * 在UIApplicationMain()函数中:
                    1. 创建UIApplication对象
                           
                    2. 创建AppDelegate代理对象
                           
                    3. 将AppDelegate代理对象设置给UIApplication对象。
                           
                    4. 程序启动完毕: 触发application:didFinishLaunchingWithOptions事件。
                           
                    5. 在UIApplicationMain()函数开启一个"死循环(事件循环)", 所以程序不会退出, 我们可以任意使用。在这个"死循环(事件循环)"中程序不断监听用户的各种事件, 依次处理(依靠"事件队列"实现)。
                           
             4> 程序退出。

UIApplication 和 Appdelegate-----iOS的更多相关文章

  1. IOS UIApplication和AppDelegate 关系

    UIApplication.AppDelegate.委托等的关系?  什么是委托?为什么要有委托?委托在Iphone中的实现机制是怎样的? 一般来说,我们创建了一个Iphone项目,默认会有这个mai ...

  2. iOS之UIApplication详解

    UIApplication对象特点: 特点1: UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序,而且是单例的.(用来封装整个应用程序的一个对象, ...

  3. UIApplication sharedApplication详细解释-IOS

    iPhone应用程序是由主函数main启动,它负责调用UIApplicationMain函数,该函数的形式如下所示: int UIApplicationMain ( int argc, char *a ...

  4. iOS - UIApplication

    前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIApplication : UIResponder @available(iOS 2.0, *) public ...

  5. (转)UIApplication sharedApplication详细解释-IOS

    iPhone应用程序是由主函数main启动,它负责调用UIApplicationMain函数,该函数的形式如下所示: int UIApplicationMain ( int argc, char *a ...

  6. iOS开发-UIApplication和App启动状态

    UIApplication简单从字面上了解就是应用程序,开发的时候有的时候会根据需要调用其中的方法,看起来不起眼,实际在iOS开发UIApplication提供了iOS程序运行期间的控制和协作工作.每 ...

  7. 深入理解UIApplication和ios程序启动过程

    在深入理解UIApplication前我们先了解ios程序的启动过程: UIApplication类在ios里面为app的管理和协调提供一个集中的点,每一个app有一个UIApplication的实例 ...

  8. ios开发之AppDelegate

    创建应用程序之后之后,默认有AppDelegate.h文件与AppDelegate.m文件.   AppDelegate为何物?  AppDelegate为整个应用的一个代理,提供程序启动.退出等类似 ...

  9. iOS之UIApplicatio、AppDelegate

    UIApplication,代表的是整个应用做的事,因此每个程序只能有一个,系统使用的是单例模式,就是[UIApplication sharedApplication]来得到一个实例. 这个单例实例是 ...

  10. [ios基础]IOS应用程序的生命周期问题

    —程序的生命周期         a.程序的生命周期是指应用程序启动到应用程序结束整个阶段的全过程         b.每一个IOS应用程序都包含一个UIApplication对象,IOS系统通过该U ...

随机推荐

  1. phpMyAdmin安装与配置(涉及LAMP配置)

    作者:zccst 安装一个phpMyAdmin还真麻烦,遇到很多问题.不过在解决过程中发现,PHP的水还真深,不是短时间可以看透的. 1,下载 建议去百度软件中心下载 2,使用 (1)解压后,复制配置 ...

  2. APP被苹果APPStore拒绝的各种原因

    APP被苹果APPStore拒绝的各种原因 1.程序有重大bug,程序不能启动,或者中途退出.2.绕过苹果的付费渠道,我们之前游戏里的用兑换码兑换金币.3.游戏里有实物奖励的话,一定要说清楚,奖励由本 ...

  3. 【转】C++ 11 右值引用的理解

    右值引用的目的之一,是为了C++中一个比较影响性能的问题:拷贝临时对象,例如,在 int foo(){ ... } int x; x = foo(); 中,在第三句中,发生了以下的事情: 1.销毁 x ...

  4. sgu194 Reactor Cooling【无源汇有上下界可行流】

    这是模板题了吧,先建立附加源汇,然后保留每个点的in-out,如果这个值是正的,那么就从附加源先这个点连一个边权为in-out的边,否则从这个点向附加汇连一条相反数的边,剩下题目中的边就用上界-下界连 ...

  5. Unity3D ——强大的跨平台3D游戏开发工具(三)

    第四章 为地形添加水源.水流以及水下的模糊效果 制作好了地形的各种效果,接下来我们给场景添加一些水效果,使场景更加丰富. 第一步:添加水面 由于我在上一次的地形创作中就已经在山峰之间制作了一块洼地,它 ...

  6. 洛谷 P1359 租用游艇

    题目描述 长江游艇俱乐部在长江上设置了n 个游艇出租站1,2,-,n.游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇.游艇出租站i 到游艇出租站j 之间的租金为r(i,j),1& ...

  7. 拓扑排序(Topological)

    #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<stack&g ...

  8. iOS + UIWebView 实践

    1. 调用java script 现在只能实现弹出窗口 [self.m_webView stringByEvaluatingJavaScriptFromString:@"alert(1)&q ...

  9. Grunt-几个常用的任务配置,加载,执行的写法

    http://www.gruntjs.net/sample-gruntfile Gruntfile 实例 下面就针对一个 Gruntfile 案例做简单分析,也可以作为一个实例使用: module.e ...

  10. 负载均衡探测器lbd

    负载均衡探测器lbd   大型网站为了解决海量访问问题,往往采用负载均衡技术,将用户的访问分配到不同的服务器上.网站的负载均衡可以从DNS和HTTP两个环节进行实施.在进行Web渗透测试的时候,需要先 ...