iOS应用程序运行流程1

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

iOS应用程序运行流程UIApplicationMain★在main.m的main函数中执行了UIApplicationMain这个方法,这是ios程序的入口点★intUIApplicationMain(intargc,char*argv[],NSString*principalClassName,NSString*delegateClassName)★argc、argv:ISOC标准main函数的参数,直接传递给UIApplicationMain进行相关处理即可★principalClassName:指定应用程序类,该类必须是UIApplication(或子类)。如果为nil,则用UIApplication类作为默认值★delegateClassName:指定应用程序类的代理类,该类必须遵守UIApplicationDelegate协议UIApplicationMain★此函数会根据principalClassName创建UIApplication对象,根据delegateClassName创建一个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性★UIApplication对象会依次给delegate对象发送不同的消息,接着会建立应用程序的mainrunloop(事件循环),进行事件的处理(首先会调用delegate对象的application:didFinishLaunchingWithOptions:)★程序正常退出时这个函数才返回。如果进程要被系统强制杀死,一般这个函数还没来得及返回进程就终止了★如果设置了主xib文件(在Info.plist中指定,key是NSMainNibFile),就会在主xib文件中寻找UIApplication和连接它的delegate。因此在主xib文件中,File’sOwner必须为UIApplication(或子类),并且建立一个遵守UIApplicationDelegate的delegate对象,建立UIApplication和delegate对象的关联关系四大对象关系图iOS中的mvcUIApplication★UIApplication是应用程序的核心,每一个程序在运行期必须有UIApplication(或子类)的一个实例(有且仅有一个),通过[UIApplicationsharedApplication]可以得到这个单例实例的指针★UIApplication帮助管理应用程序的生命周期,而它通过delegate来履行这个任务★UIApplication可以接收事件,把所有用户事件都放入队列,逐个处理,它会发送当前事件给一个合适的目标控件进行处理。它还将部分事件转给delegate对象来处理,delegate可处理的事件包括:应用程序的生命周期事件(如程序启动和关闭)、系统事件(如来电)UIApplication★[UIApplicationsharedApplication].windows:在本应用中打开的UIWindow列表,这样就可以接触应用中的任何一个UIView对象★[UIApplicationsharedApplication].keyWindow:用来接收键盘以及非触摸类的消息事件的UIWindow,而且程序中每个时刻只能有一个UIWindow是keyWindow。如果某个UIWindow内部的文本框不能输入文字,可能是因为这个UIWindow不是keyWindow下面是这个类的一些功能:1.设置icon上的数字图标//设置主界面icon上的数字图标,在2.0中引进,缺省为0[UIApplicationsharedApplication].applicationIconBadgeNumber=4;2.设置摇动手势的时候,是否支持redo,undo操作//摇动手势,是否支持redoundo操作。//3.0以后引进,缺省YES[UIApplicationsharedApplication].applicationSupportsShakeToEdit=YES;3.判断程序运行状态//判断程序运行状态,在2.0以后引入/*UIApplicationStateActive,UIApplicationStateInactive,UIApplicationStateBackground*/if([UIApplicationsharedApplication].applicationState==UIApplicationStateInactive){NSLog(@程序在运行状态);}4.阻止屏幕变暗进入休眠状态//阻止屏幕变暗,慎重使用,缺省为no2.0[UIApplicationsharedApplication].idleTimerDisabled=YES;(慎重使用本功能,因为非常耗电)5.显示联网状态//显示联网标记2.0[UIApplicationsharedApplication].networkActivityIndicatorVisible=YES;6.在map上显示一个地址NSString*addressText=@1InfiniteLoop,Cupertino,CA95014;//URLencodethespacesaddressText=[addressTextstringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];NSString*urlText=[NSStringstringWithFormat:@=%@,addressText];[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:urlText]];7.发送电子邮件NSString*recipients=@mailto:first@example.com?cc=second@example.com,third@example.com&subject=HellofromCalifornia!;NSString*body=@&body=ItisraininginsunnyCalifornia!;NSString*email=[NSStringstringWithFormat:@%@%@,recipients,body];email=[emailstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:email]];8.打电话到一个号码//CallGoogle411[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@tel://8004664411]];9.发送短信//TexttoGoogleSMS[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@sms://466453]];10.打开一个网址//LanuchanyiPhonedevelopersfavsite[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@]];UIApplicationDelegate★在开发过程中,UIApplication是一个非常重要的全局对象。但在实际编程中我们并不直接和UIApplication对象打交道,而是和其代理打交道,它的代理必须遵守UIApplicationDelegate协议,代理�供了相关的生命周期方法来处理应用程序的系统事件★ios设备的内存极其优先,如果为app分配了太多内存,操作系统会终止app的运行,在UIApplication接收到这个事件后它会调用代理的applicationDidReceiveMemoryWarning方法,代理在这个方法内可以进行释放内存的操作以防止操作系统强制终止应用程序的运行UIApplicationDelegat★ios并不是多任务的操作系统,所以app很容易受到打扰。比如一个来电可能导致app失去焦点,如果这个时候接听了电话,那么app会自动终止运行★还有很多其它类似的事件会导致app失去焦点★app失去焦点前会调用代理的applicationWillResignActive★app再次获取焦点时会调用代理的applicationDidBecomeActive★在运行app时锁屏会调用代理的applicationWillResignActive★当屏幕被解锁时,会调用代理的applicationDidBecomeActiveUIApplicationDelegate生命周期方法说明1、-(void)applicationWillResignActive:(UIApplication*)application{//从主动到非活动状态的应用程序时发送。这可导致产生某些类型的临时中断(如传入电话呼叫或SMS消息),或者当用户退出应用程序,它开始过渡到的背景状态。//使用此方法暂停正在进行的任务,禁用定时器,踩下油门,OpenGLES的帧速率。游戏应该使用这种方法来暂停游戏。}2、-(void)applicationDidBecomeActive:(UIApplication*)applicatio说明:当应用程序入活动状态执行,这个刚好跟上面那个方法相反3、-(void)applicationDidEnterBackground:(UIApplication*)application{说明:当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可//使用这个方法来释放共享资源,保存用户数据,废止定时器,并存储足够的应用程序状态信息的情况下被终止后,将应用程序恢复到目前的状态。//如果你的应用程序支持后台运行,这种方法被调用,而不是applicationWillTerminate:当用户退出。}4、-(void)applicationWillEnterForeground:(UIApplication*)applicatio说明:当程序从后台将要重新回到前台时候调用,这个刚好跟上面的那个方法相反。5、-(void)applicationWillTerminate:(UIApplication*)applicatio//不支持多任务的时候调用说明:当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSuspend的键值(自动设置)。6、-(void)applicationDidReceiveMemoryWarning:(UIApplication*)applicatio说明:iPhone设备只有有限的内存,如果为应用程序分配了太多内存操作系统会终止应用程序的运行,在终止前会执行这个方法,通常可以在这里进行内存清理工作防止程序被终止7、-(void)applicationSignificantTimeChange:(UIApplication*)applicatio说明:当系统时间发生改变时执行8、-(void)applicationDidFinishLaunching:(UIApplication*)applicatio说明:当程序载入后执行9、-(void)application:(UIApplication)applicationwillChangeStatusBarFrame:(C

1 / 23
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功