久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

UIApplication深入研究

 杰出天下 2012-06-17



很多時(shí)候,我們不需要關(guān)心這個(gè)類,,我們很少繼承這個(gè)類,偶爾會(huì)調(diào)用這個(gè)類的api來(lái)實(shí)現(xiàn)一些功能,但是不可否認(rèn),,這個(gè)類是iOS編程中很重要的一個(gè)概念

UIApplication的核心作用是提供了iOS程序運(yùn)行期間的控制和協(xié)作工作,。

每一個(gè)程序在運(yùn)行期必須有且僅有一個(gè)UIApplication(或則其子類)的一個(gè)實(shí)例?;叵胍幌挛以谇懊娴奈恼隆癿ain函數(shù)研究”的文章中提到的main函數(shù)的代碼,,可以看出,在程序開始運(yùn)行的時(shí)候,,UIApplicationMain函數(shù)是程序進(jìn)入點(diǎn),,這個(gè)函數(shù)做了很多工作,其中一個(gè)重要的工作就是創(chuàng)建一個(gè)UIApplication的單例實(shí)例,。在你的代碼中你,,你可以通過(guò)調(diào)用[UIApplication sharedApplication]來(lái)得到這個(gè)單例實(shí)例的指針。

UIApplication的一個(gè)主要工作是處理用戶事件,,它會(huì)起一個(gè)隊(duì)列,,把所有用戶事件都放入隊(duì)列,逐個(gè)處理,,在處理的時(shí)候,,它會(huì)發(fā)送當(dāng)前事件到一個(gè)合適的處理事件的目標(biāo)控件。此外,,UIApplication實(shí)例還維護(hù)一個(gè)在本應(yīng)用中打開的window列表(UIWindow實(shí)例),,這樣它就可以接觸應(yīng)用中的任何一個(gè)UIView對(duì)象。UIApplication實(shí)例會(huì)被賦予一個(gè)代理對(duì)象,,以處理應(yīng)用程序的生命周期事件(比如程序啟動(dòng)和關(guān)閉),、系統(tǒng)事件(比如來(lái)電、記事項(xiàng)警告)等等。

新建一個(gè)任意類型的iOS應(yīng)用工程,,加入我們?cè)贑lass Prefix輸入是TC,,我們可以看到工程中生成一個(gè)類:

TCAppDelegate :UIResponder <UIApplicationDelegate>

這里這個(gè)類的基類是UIResponder,和4.2以前生成的工程是不同的,,以前是繼承自NSObject,。不論如何,本類實(shí)現(xiàn)了一個(gè)名叫UIApplicationDelegate的接口,,這個(gè)表明這個(gè)類就是這個(gè)工程中UIApplication實(shí)例的代理類,。

在main函數(shù)中,

@autoreleasepool {

       returnUIApplicationMain(argc, argv, nil,NSStringFromClass([TCAppDelegateclass]));

    }

這里傳入了代理類到UIApplicationMain函數(shù)中,,UIApplicationMain函數(shù)在生成唯一個(gè)UIApplication的時(shí)候就可以把代理類的實(shí)例指針告訴這個(gè)單例對(duì)象了,。

可以通過(guò)如下代碼獲UIApplication代理對(duì)象:

 

TCAppDelegate *myDelegate = (TCAppDelegate *)[UIApplicationsharedApplication].delegate;

 

UIApplication接收到系統(tǒng)事件和生命周期事件時(shí),會(huì)把相應(yīng)的事件傳遞給UIApplicationDelegate進(jìn)行處理,,下表所列的生命周期函數(shù)大都是可選的,,但為了應(yīng)用程序的健壯性程序員應(yīng)該實(shí)現(xiàn)它們。

UIApplicationDelegate Event-Handling Methods

Method Signature

1:application:didChangeStatusBarFrame:

- (void)application:(UIApplication*)application didChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame

2:application:didChangeStatusBarOrientation:

- (void)application:(UIApplication*)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation

3:application:handleOpenURL:

- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url

4:application:willChangeStatusBarOrientation:duration:

- (void)application:(UIApplication*)application willChangeStatusBarOrientation:

(UIInterfaceOrientation)newStatusBarOrientation
duration:(NSTimeInterval)duration

5:application:willChangeStatusBarFrame

- (void)application:(UIApplication)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame

6:applicationDidBecomeActive:

- (void)applicationDidBecomeActive:(UIApplication*)application

7:applicationDidFinishLaunching:

- (void)applicationDidFinishLaunching:(UIApplication*)application

8:applicationDidReceiveMemoryWarning:

- (void)applicationDidReceiveMemoryWarning:(UIApplication*)application

9:applicationSignificantTimeChange:

- (void)applicationSignificantTimeChange:(UIApplication*)application

10:applicationWillResignActive:

- (void)applicationWillResignActive:(UIApplication*)application

11:applicationWillTerminate:

- (void)applicationWillTerminate:(UIApplication*)application

 

1,、- (void)applicationWillResignActive:(UIApplication *)application

說(shuō)明:當(dāng)應(yīng)用程序?qū)⒁敕腔顒?dòng)狀態(tài)執(zhí)行,,在此期間,應(yīng)用程序不接收消息或事件,,比如來(lái)電話了

2,、- (void)applicationDidBecomeActive:(UIApplication *)application

說(shuō)明:當(dāng)應(yīng)用程序入活動(dòng)狀態(tài)執(zhí)行,這個(gè)剛好跟上面那個(gè)方法相反

3,、- (void)applicationDidEnterBackground:(UIApplication *)application

說(shuō)明:當(dāng)程序被推送到后臺(tái)的時(shí)候調(diào)用,。所以要設(shè)置后臺(tái)繼續(xù)運(yùn)行,則在這個(gè)函數(shù)里面設(shè)置即可

4,、- (void)applicationWillEnterForeground:(UIApplication *)application

說(shuō)明:當(dāng)程序從后臺(tái)將要重新回到前臺(tái)時(shí)候調(diào)用,,這個(gè)剛好跟上面的那個(gè)方法相反。

5,、- (void)applicationWillTerminate:(UIApplication *)application

說(shuō)明:當(dāng)程序?qū)⒁顺鍪潜徽{(diào)用,,通常是用來(lái)保存數(shù)據(jù)和一些退出前的清理工作。這個(gè)需要要設(shè)置UIApplicationExitsOnSuspend的鍵值,。

6,、- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application

說(shuō)明:iPhone設(shè)備只有有限的內(nèi)存,如果為應(yīng)用程序分配了太多內(nèi)存操作系統(tǒng)會(huì)終止應(yīng)用程序的運(yùn)行,,在終止前會(huì)執(zhí)行這個(gè)方法,,通常可以在這里進(jìn)行內(nèi)存清理工作防止程序被終止

7,、- (void)applicationSignificantTimeChange:(UIApplication*)application

說(shuō)明:當(dāng)系統(tǒng)時(shí)間發(fā)生改變時(shí)執(zhí)行

8,、- (void)applicationDidFinishLaunching:(UIApplication*)application

說(shuō)明:當(dāng)程序載入后執(zhí)行

9,、- (void)application:(UIApplication)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame

說(shuō)明:當(dāng)StatusBar框?qū)⒁兓瘯r(shí)執(zhí)行

10、- (void)application:(UIApplication*)application willChangeStatusBarOrientation:

(UIInterfaceOrientation)newStatusBarOrientation

duration:(NSTimeInterval)duration

說(shuō)明:當(dāng)StatusBar框方向?qū)⒁兓瘯r(shí)執(zhí)行

11,、- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url

說(shuō)明:當(dāng)通過(guò)url執(zhí)行

12,、- (void)application:(UIApplication*)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation

說(shuō)明:當(dāng)StatusBar框方向變化完成后執(zhí)行

13,、- (void)application:(UIApplication*)application didChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame

說(shuō)明:當(dāng)StatusBar框變化完成后執(zhí)行

iPhone中的應(yīng)用程序很容易受到打擾,,比如一個(gè)來(lái)電可能導(dǎo)致應(yīng)用程序失去焦點(diǎn),如果這個(gè)時(shí)候接聽了電話,,那么應(yīng)用程序會(huì)轉(zhuǎn)到后臺(tái)運(yùn)行,。還有很多其它類似的事件會(huì)導(dǎo)致iPhone應(yīng)用程序失去焦點(diǎn),在應(yīng)用程序失去焦點(diǎn)前會(huì)調(diào)用委托類的applicationWillResignActive()方法,,而應(yīng)用程序再次獲取到焦點(diǎn)的時(shí)候會(huì)調(diào)用applicationDidBecomeActive()方法,。比如在運(yùn)行應(yīng)用程序的時(shí)候鎖屏?xí){(diào)用委托類的applicationWillResignActive()方法,而當(dāng)屏幕被解鎖的時(shí)候,,又會(huì)調(diào)用applicationDidBecomeActive()方法,。

 

另外一個(gè)非常重要的方法就是applicationDidReceiveMemoryWarning(),因?yàn)閕Phone設(shè)備只有有限的內(nèi)存,,如果為應(yīng)用程序分配了太多內(nèi)存操作系統(tǒng)會(huì)終止應(yīng)用程序的運(yùn)行,,但在終止之前操作系統(tǒng)會(huì)通過(guò)先調(diào)用委托類的applicationDidReceiveMemoryWarning()方法警告應(yīng)用程序,在UIApplication接收到這個(gè)事件后它會(huì)傳遞給委托類的applicationDidReceiveMemoryWarning()方法,,委托類在這個(gè)方法內(nèi)可以進(jìn)行釋放內(nèi)存的操作以防止操作系統(tǒng)強(qiáng)制終止應(yīng)用程序的運(yùn)行,。

下面是這個(gè)類的一些功能:

1.設(shè)置icon上的數(shù)字圖標(biāo)

    //設(shè)置主界面icon上的數(shù)字圖標(biāo),在2.0中引進(jìn),, 缺省為0

    [UIApplicationsharedApplication].applicationIconBadgeNumber = 4;

2.設(shè)置搖動(dòng)手勢(shì)的時(shí)候,,是否支持redo,undo操作

    //搖動(dòng)手勢(shì),是否支持redo undo操作,。

   //3.0以后引進(jìn),,缺省YES

    [UIApplicationsharedApplication].applicationSupportsShakeToEdit =YES;


3.判斷程序運(yùn)行狀態(tài)

    //判斷程序運(yùn)行狀態(tài),在2.0以后引入

    /*

     UIApplicationStateActive,

     UIApplicationStateInactive,

     UIApplicationStateBackground

     */

   if([UIApplicationsharedApplication].applicationState ==UIApplicationStateInactive){

        NSLog(@"程序在運(yùn)行狀態(tài)");

    }


4.阻止屏幕變暗進(jìn)入休眠狀態(tài)

    //阻止屏幕變暗,,慎重使用,缺省為no 2.0

    [UIApplicationsharedApplication].idleTimerDisabled =YES;

慎重使用本功能,,因?yàn)榉浅:碾姟?/p>

5.顯示聯(lián)網(wǎng)狀態(tài)

    //顯示聯(lián)網(wǎng)標(biāo)記 2.0

    [UIApplicationsharedApplication].networkActivityIndicatorVisible =YES;


6.在map上顯示一個(gè)地址

   NSString* addressText =@"1 Infinite Loop, Cupertino, CA 95014";

   // URL encode the spaces

    addressText =  [addressTextstringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];

   NSString* urlText = [NSStringstringWithFormat:@"http://maps.google.com/maps?q=%@", addressText];

    

    [[UIApplicationsharedApplication]openURL:[NSURLURLWithString:urlText]];


7.發(fā)送電子郵件

   NSString *recipients =@"mailto:[email protected][email protected],[email protected]&subject=Hello from California!";

   NSString *body =@"&body=It is raining in sunny California!";

    

    NSString *email = [NSStringstringWithFormat:@"%@%@", recipients, body];

    email = [emailstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    

    [[UIApplicationsharedApplication]openURL:[NSURLURLWithString:email]];


8.打電話到一個(gè)號(hào)碼


   // Call Google 411

    [[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"tel://8004664411"]];

9.發(fā)送短信

    // Text to Google SMS

    [[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"sms://466453"]];

10.打開一個(gè)網(wǎng)址


   // Lanuch any iPhone developers fav site

    [[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"http://itunesconnect.apple.com"]];

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多