ios UIApplication 在本地消息的推送上的应用

来源:互联网 发布:linux c语言sleep 编辑:程序博客网 时间:2024/05/29 17:06

那么UIApplicationMain函数到底做了哪些事情呢?这个函数主要负责三件 事情: 

1)从给定的类名初始化应用程序对象,也就是初始化UIApplication或者子类对象的一个实例,如果你在这里给定的是nil,那么
系统会默认UIApplication类,也就主要是这个类来控制以及协调应用程序的运行。在后续的工作中,你可以用静态方法sharedApplication 来获取应用程序的句柄。 

2)从给定的应用程序委托类,初始化一个应用程序委托。并把该委托设置为应用程序的委托,这里就有如果传入参数为nil,会调用函数访问 Info.plist文件来寻找主nib文件,获取应用程序委托。 

3)启动主事件循环,并开始接收事件。 


该UIApplication类提供了一个内部监督办公室的协调运行的应用程序的集中控制点。

每个应用程序必须有且只有一个实例UIApplication (或子类UIApplication )。

当应用程序启动时, UIApplicationMain函数被调用;除其他任务,该函数创建一个单UIApplication对象。

此后,您可以访问这个对象调用由sharedApplication类的方法。

一个重要的角色UIApplication的目的是处理事件的初期路由传入的用户。

这还调度对象(行动控制消息转发给它UIControl )到适当的目标对象。

此外, UIApplication对象维护一个窗口列出所有的( UIWindow对象)当前打开的应用程序,因此它可以通过这些检索的任何应用程序UIView对象。

应用程序对象通常被分配一个代表,一个对象,应用程序运行时事件通知重要,例如,应用程序启动,低内存警告,和应用程序终止,给它一个机会,作出适当的反应。

应用程序可以通过一个协同处理资源,如电子邮件的图像文件或openURL:方法。

例如,一个应用程序打开一个与这个方法的电子邮件网址可能导致邮件客户端启动并显示消息。


sharedApplication

返回的单身应用程序实例。
+ (UIApplication *)sharedApplication


cancelAllLocalNotifications

取消所有预定当地通知交货。
- (void)cancelAllLocalNotifications


cancelLocalNotification:

取消指定的当地通知传递计划。
- (void)cancelLocalNotification:( UILocalNotification *) notification


canOpenURL:

返回应用程序是否可以打开一个给定的URL资源。
- (BOOL)canOpenURL:( NSURL *) url


registerForRemoteNotificationTypes:

注册以接收来自苹果供应商通过指定类型的通知推送服务。
- (void)registerForRemoteNotificationTypes:(types)
类型
一个位掩码指明通知的应用程序接受的类型。



setStatusBarHidden:withAnimation:

隐藏或显示状态栏,选择动画过渡。
- (void)setStatusBarHidden:(BOOL) hidden withAnimation:(( UIStatusBarAnimation ) animation )
Parameters参数
hidden 隐藏
YES隐藏状态栏, NO以显示状态栏。
withAnimation 动画
一个常数,指示是否应该有一个动画,如果一个请求时,是否应该淡入或淡出的状态栏或是否应该幻灯片或缩小状态栏。




setStatusBarOrientation:animated:

设置应用程序的状态栏到指定的方向,可选择动画过渡。
- (void)setStatusBarOrientation:( UIInterfaceOrientation ) interfaceOrientation animated:(BOOL) animated
Parameters参数
一个状态栏的具体方向。.默认值是UIInterfaceOrientationPortrait 。
animated 动画
 YES ,如果过渡到新的方向应该是动画, NO是否应立即动画,没有。




unregisterForRemoteNotifications

从苹果公司收到注销通知推送服务。
- (void)unregisterForRemoteNotifications




UIInterfaceOrientation

该应用程序的用户界面的方向。
typedef enum {
UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait ,
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown ,
UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeRight ,
UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeLeft
} UIInterfaceOrientation;



UIStatusBarStyle

该设备的状态栏的风格。
typedef enum {
UIStatusBarStyleDefault ,
UIStatusBarStyleBlackTranslucent ,
UIStatusBarStyleBlackOpaque
} UIStatusBarStyle


UIStatusBarAnimation

该动画应用到状态栏,因为它是隐藏或可见。
typedef enum {枚举类型定义{
    UIStatusBarAnimationNone ,
    UIStatusBarAnimationFade ,
    UIStatusBarAnimationSlide ,
} UIStatusBarAnimation;


小案例
// 创建一个本地推送  UILocalNotification *notification = [[[UILocalNotification alloc] init] autorelease];  //设置10秒之后  NSDate *pushDate = [NSDate dateWithTimeIntervalSinceNow:10];  if (notification != nil) {      // 设置推送时间      notification.fireDate = pushDate;      // 设置时区      notification.timeZone = [NSTimeZone defaultTimeZone];      // 设置重复间隔      notification.repeatInterval = kCFCalendarUnitDay;      // 推送声音      notification.soundName = UILocalNotificationDefaultSoundName;      // 推送内容      notification.alertBody = @"推送内容";      //显示在icon上的红色圈中的数子      notification.applicationIconBadgeNumber = 1;      //设置userinfo 方便在之后需要撤销的时候使用      NSDictionary *info = [NSDictionary dictionaryWithObject:@"name"forKey:@"key"];      notification.userInfo = info;      //添加推送到UIApplication             UIApplication *app = [UIApplication sharedApplication];      [app scheduleLocalNotification:notification];   }  

第二步:接收本地推送

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification*)notification{      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"iWeibo" message:notification.alertBody delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];      [alert show];      // 图标上的数字减1      application.applicationIconBadgeNumber -= 1;  }  

第三步:解除本地推送

// 获得 UIApplication  UIApplication *app = [UIApplication sharedApplication];  //获取本地推送数组  NSArray *localArray = [app scheduledLocalNotifications];  //声明本地通知对象  UILocalNotification *localNotification;  if (localArray) {      for (UILocalNotification *noti in localArray) {          NSDictionary *dict = noti.userInfo;          if (dict) {              NSString *inKey = [dict objectForKey:@"key"];              if ([inKey isEqualToString:@"对应的key值"]) {                  if (localNotification){                      [localNotification release];                      localNotification = nil;                  }                  localNotification = [noti retain];                  break;              }          }      }      //判断是否找到已经存在的相同key的推送      if (!localNotification) {          //不存在初始化          localNotification = [[UILocalNotification alloc] init];      }      if (localNotification) {          //不推送 取消推送          [app cancelLocalNotification:localNotification];          [localNotification release];          return;      }  }
IOS应用程序5种状态
1.Not running:应用还没有启动,或者应用正在运行但是途中被系
统停止

2.Inactive:当前应用正在前台运行,但是并不接收事件(当前 或许
正在执行其它代码)。一般每当应用要从一个状态切换到另一个不 同的状态时,中途过渡会短暂停留在此状态。唯一在此状态停留时 间比较长的情况是:当用户 锁屏时,或者系统提示用户去响应某 些(诸如电话来电、有未读短信等)事件的时候。

Active:当前应用正在前台运行,并且接收事件。这是应用正在前
台运行时所处的正常状态。

Background:应用处在后台,并且还在执行代码。大多数将 要进
入Suspended状态的应用,会先短暂进入此状态。然而,对于请求 需要额外的执行时间的应用,会在此状态保持更长一段时间。另外, 如果一个应用要 求启动时直接进入后台运行,这样的应用会直接 从Not running状态进入Background状态,中途不会经过Inactive状 态。比如没有界面的应用。注此处并不特指没有界面的应用,其实 也可以是 有界面的应用,只是如果要直接进入background状态的 话,该应用界面不会被显示。

Suspended:应用处在后台,并且已停止执行代码。系统自动 的
将应用移入此状态,且在此举之前不会对应用做任何通知。当处在 此状态时,应用依然驻留内存但不执行任何程序代码。当系统发生 低内存告警时,系统将会将处 于Suspended状态的应用清除出内 存以为正在前台运行的应用提供足够的内存。



原创粉丝点击