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

AppDelegate.m中的常用的方法介绍,以及ios程序的状态

2014-05-23 18:43 771 查看
在AppDelegate.m中一般会用到以下方法:

1、application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

注解:在应用程序启动后,委托首先调用该方法。可以在该方法里做一些对象的初始化。我的理解是:应用程序启动后,代理首先调用该方法进行一些列初始化。可想而知在这个方法里我们可以做很多事,比如:推送的注册等等。

2、[b]applicationWillResignActive:(UIApplication
*)application
[/b]

注解:在应用程序将要由活动状态切换到非活动状态时候,委托会调用该方法。如
按下 home 按钮,返回主屏幕,或全屏之间切换应用程序等。一般来说该方法里面我们不会过多的做逻辑处理。该方法了解就OK,不用太重视。(特殊需求例外)

3、[b]applicationDidEnterBackground:(UIApplication
*)application
[/b]

[b]注解:在应用程序已进入后台程序时,委托调用该方法。与上面第2个方法一样,不需过多的添加逻辑处理。(特殊需求例外)

[/b]

4、[b]applicationWillEnterForeground:(UIApplication
*)application
[/b]

注解:在应用程序将要进入前台时(被激活),委托调用该方法,刚好与 applicationWillResignActive
方法相对应。我的理解是:应用在后台挂起的状态转变成激活状态的时候,会调用到该方法。

5、applicationDidBecomeActive:(UIApplication
*)application


注解:在应用程序已被激活后,委托调用该方法,刚好与 applicationDidEnterBackground 方法相对应。这里就可以做一些逻辑处理了,但我们一般都没咋弄到该方法。

6、applicationWillTerminate:(UIApplication
*)application

注解:在应用程序要完全退出的时候,委托调用该方法。(一般我们也没咋用)

上面是AppDelegate.m中一般会出现的方法,在我们实际中我还会用到一些方法,下面的方法是我在AppDelegate.m实际中用到的,如果你们还知道实际中AppDelegate.m我们还会用到的方法反馈一下我来补全。大家共同学习下:

-
(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

注解:通过远程通信来将应用状态为正在前台或者后台启动运行,委托调用该方法。比如在做推送的时候,在点击推送的消息将应用程序正在前台或者后台激活时候代理就会掉用到该方法。例如:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
if (userInfo != NULL) {
int badge = [UIApplication sharedApplication].applicationIconBadgeNumber;
if (badge > 0) {

//如果应用程序消息通知标记数(即小红圈中的数字)大于0,清除标记。
badge--;
//清除标记。清除小红圈中数字,小红圈中数字为0,小红圈才会消除。
[UIApplication sharedApplication].applicationIconBadgeNumber = badge;
}

//跳转到指定url页面
NSString *url = [[userInfo objectForKey:@"data"] objectForKey:@"url"];

if (url != NULL) {
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.myWebViewController = [[MyWebViewController alloc] initWithNibName:@"MyWebViewController" bundle:nil];
}else{
self.myWebViewController = [[MyWebViewController alloc] initWithNibName:@"MyWebViewController_ipad" bundle:nil];
}

self.myWebViewController.urlString = url;

[self.window setRootViewController:self.myWebViewController];
}

NSString *id =[[userInfo objectForKey:@"data"] objectForKey:@"id"];
NSString *urlStr = [[NSString alloc] initWithFormat:@"http://www.yiweihui.com/mobile/api.php?action=update_is_show&id=%@",id];
NSURL *requestUrl = [NSURL URLWithString:urlStr];
__weak ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:requestUrl];
[request setCompletionBlock:^{
NSString *responseStr = [request responseString];
NSLog(@"推送后反馈的信息:%@",responseStr);
}];
[request setFailedBlock:^{
NSError *error = [request error];
NSLog(@"error is :%@",error);
}];
[request startAsynchronous];

}

}
如果是使用 iOS 7 的 Remote Notification 特性那么就要用到下面的方法:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler;
</pre><pre name="code" class="objc" style="text-align: left;background-color: rgb(255, 255, 255); ">如果应用程序处在未启动的情况下,由推送启动应用程序,代理就会调用application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法。
iOS应用程序状态机一共有五种状态:
1. Not running:应用还没有启动,或者应用正在运行但是途中被系统停止。
2.Inactive:当前应用正在前台运行,但是并不接收事件(当前或许正在执行其它代码)。一般每当应用要从一个状态切换到另一个不同的状态时,中途过渡会短暂停留在此状态。唯一在此状态停留时间比较长的情况是:当用户锁屏时,或者系统提示用户去响应某些(诸如电话来电、有未读短信等)事件的时候。
3. Active:当前应用正在前台运行,并且接收事件。这是应用正在前台运行时所处的正常状态。
4. Background:应用处在后台,并且还在执行代码。大多数将要进入Suspended状态的应用,会先短暂进入此状态。然而,对于请求需要额外的执行时间的应用,会在此状态保持更长一段时间。另外,如果一个应用要求启动时直接进入后台运行,这样的应用会直接从Not running状态进入Background状态,中途不会经过Inactive状态。比如没有界面的应用。注此处并不特指没有界面的应用,其实也可以是有界面的应用,只是如果要直接进入background状态的话,该应用界面不会被显示。
5. Suspended:应用处在后台,并且已停止执行代码。系统自动的将应用移入此状态,且在此举之前不会对应用做任何通知。当处在此状态时,应用依然驻留内存但不执行任何程序代码。当系统发生低内存告警时,系统将会将处于Suspended状态的应用清除出内存以为正在前台运行的应用提供足够的内存。
之间的状态相互转化的图如下:




如有不对之处,敬请留言


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