1. 程式人生 > >UIApplication sharedApplication詳細解釋-IOS

UIApplication sharedApplication詳細解釋-IOS

iPhone應用程式是由主函式main啟動,它負責呼叫UIApplicationMain函式,該函式的形式如下所示: 
int UIApplicationMain ( 
int argc, 
char *argv[], 
NSString *principalClassName, 
NSString *delegateClassName 
); 
那麼UIApplicationMain函式到底做了哪些事情呢?這個函式主要負責三件 事情: 


1)從給定的類名初始化應用程式物件,也就是初始化UIApplication或者子類物件的一個例項,如果你在這裡給定的是nil,那麼 系統會預設UIApplication類,也就主要是這個類來控制以及協調應用程式的執行。在後續的工作中,你可以用靜態方法sharedApplication 來獲取應用程式的控制代碼。 


2)從給定的應用程式委託類,初始化一個應用程式委託。並把該委託設定為應用程式的委託,這裡就有如果傳入引數為nil,會呼叫函式訪問 Info.plist檔案來尋找主nib檔案,獲取應用程式委託。 


3)啟動主事件迴圈,並開始接收事件。 


上面是UIApplicationMain函式的工作,接下來一個問題是應用程式檢視的顯示、訊息的控制怎麼辦?下面就是UIApplication(或 者子類)物件的職責,這個物件主要做下面幾件事: 


1)負責處理到來的使用者事件,並分發事件訊息到應該處理該訊息的目標物件(sender,  action)。 
2)管理以及控制檢視,包括呈現、控制行為、當前顯示檢視等。 
3)該物件有一個應用程式委託物件,當一些生命週期內重要事件(可以包括系統事件或者生命週期控制事件)發生時,應用程式通知該物件。例如,應用程式啟 動、記憶體不夠了或者應用程式結束等,讓這些事件發生時,應用程式委託去響應。 

通 過上面的分析,可以知道UIApplication對開發者來說,是一個黑箱,它也可以是。因為所有的操作,都可以由它的委託來幫我們完成,它只需要在 後面維護一些不可更改的東西,如事件訊息分發和傳遞、給委託傳送事件處理請求等等,如,應用程式載入處理完畢,它會發送訊息給委託,然後委託可以在 applicationDidFinishLanching委託函式中去實現開發者想要的動作。利用XCODE在建立應用程式時,會預設實現一個應用程式 委託類。而對於載入的檢視,則有檢視相關的委託類來處理檢視載入過程的生命事件。下面說明委託主要可以辦哪些事情: 
控制應用程式的行為 


- (void)applicationDidFinishLaunching:(UIApplication *)application 
          應用程式啟動完畢。 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
        當由於其它方法開啟應用程式(如URL指定或者連線),通知委託啟動完畢 
- (void)applicationWillTerminate:(UIApplication *)application 
         通知委託,應用程式將在關閉 退出,請做一些清理工作。 
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application 
        通知委託,應用程式收到了為來自系統的記憶體不足警告。-(void)applicationSignificantTimeChange:(UIApplication *)application 
      通知委託系統時間發生改變(主要是指時間屬性,而不是具體的時間值) 
開啟URL 
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
           開啟指定的URL 
控制狀態列方位變化 
– application:willChangeStatusBarOrientation:duration: 
        裝置方向將要發生改變 
– application:didChangeStatusBarOrientation: 
活動狀態改變 
- (void)applicationWillResignActive:(UIApplication *)application 
   通知委託應用程式將進入非活動狀態,在此期間,應用程式不接收訊息或事件。-(void)applicationDidBecomeActive:(UIApplication *)application 
      通知委託應用程式進入活動狀態,請恢復資料 

1.設定icon上的數字圖示

    //設定主介面icon上的數字圖示,在2.0中引進, 預設為0
    [UIApplicationsharedApplication].applicationIconBadgeNumber = 4;

2.設定搖動手勢的時候,是否支援redo,undo操作

   //搖動手勢,是否支援redo undo操作。
   //3.0以後引進,預設YES
    [UIApplicationsharedApplication].applicationSupportsShakeToEdit =YES;

3.判斷程式執行狀態

    //判斷程式執行狀態,在2.0以後引入
   
   if([UIApplicationsharedApplication].applicationState ==UIApplicationStateInactive){
        NSLog(@"程式在執行狀態");
    }

4.阻止螢幕變暗進入休眠狀態

   //阻止螢幕變暗,慎重使用,預設為no 2.0
    [UIApplicationsharedApplication].idleTimerDisabled =YES;

慎重使用本功能,因為非常耗電。

5.顯示聯網狀態

    //顯示聯網標記 2.0
    [UIApplicationsharedApplication].networkActivityIndicatorVisible =YES;

6.在map上顯示一個地址

   NSString* addressText [email protected]"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.傳送電子郵件

   NSString *recipients [email protected]"mailto:[email protected][email protected],[email protected]&subject=Hello from California!";
   NSString *body [email protected]"&body=It is raining in sunny California!";
   
    NSString *email = [NSStringstringWithFormat:@"%@%@", recipients, body];
    email = [emailstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
   
    [[UIApplicationsharedApplication]openURL:[NSURLURLWithString:email]];

8.打電話到一個號碼

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

9.傳送簡訊 
    // Text to Google SMS
    [[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"sms://466453"]];

10.開啟一個網址

   // Lanuch any iPhone developers fav site
    [[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"http://itunesconnect.apple.com"]];


可以看到UIApplication的頭檔案實現 
@interface UIApplication :UIResponder <UIActionSheetDelegate>{ 
@package 
id<UIApplicationDelegate> _delegate ;  //這就是應用程式委託。 
NSTimer ....... 

因此,在UIApplication中處理的系統事件時,只需轉到_delegate這個類去處理, 這個類物件就是應用程式委託物件。我們可以從應用程式的單例類物件中得到應用程式委託的物件 
UIApplicationDelegate* myDelegate = [[UIApplication sharedApplication] delegate]; 

UIApplication 接收到所有的系統事件和生命週期事件時,都會把事件傳遞給UIApplicationDelegate進行處理,對於使用者輸入 事件,則傳遞給相應的目標物件去處理。比如我們在應用程式被來電等訊息後,可以呼叫應用程式委託類的 applicationWillResignActive()方法,這個方法在使用者鎖住螢幕時,也會呼叫,與之相適應的是應用程式重新被使用者開啟時的委託 方法。另外常用的就是記憶體不足的系統警告,此時會呼叫應用程式委託類的applicationDidReceiveMemoryWarning()方法, 然後我們就可以試著釋放一些記憶體了。 

上面就是應用程式生命週期(啟動,中止,恢復,退出等過程)的應用程式處理UIApplication sharedApplication

相關推薦

UIApplication sharedApplication詳細解釋-IOS

iPhone應用程式是由主函式main啟動,它負責呼叫UIApplicationMain函式,該函式的形式如下所示:  int UIApplicationMain (  int argc,  char *argv[],  NSString *principalClassName,  NSString *de

IOSUIApplication sharedApplication詳細解釋

iPhone應用程式是由主函式main啟動,它負責呼叫UIApplicationMain函式,該函式的形式如下所示: int UIApplicationMain ( int argc, char *argv[], NSString *princi

ios::sync_with_stdio(false) 詳細解釋

在競賽中,遇到大資料時,往往讀檔案成了程式執行速度的瓶頸,需要更快的讀取方式。相信幾乎所有的C++學習者都在cin機器緩慢的速度上栽過跟頭,於是從此以後發誓不用cin讀資料。還有人說Pascal的read語句的速度是C/C++中scanf比不上的,C++選手只能乾著急。難道C++真的低Pas

ios-設定狀態列樣式 [UIApplication sharedApplication].statusBarStyle

在info.plist檔案中新增一個屬性View controller-based status bar appearance,設定為No(不支援在檔案中設定狀態列樣式) 然後在AppDelegate中寫上[UIApplication sharedApplication].status

iOS [UIApplication sharedApplication] openURL等常用的方法使用例如:打電話、定位等

1、打電話 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://電話號碼"]]; 2、發簡訊 [[UIApplication sharedApplication] openURL

iOS開發中使用[[UIApplication sharedApplication] openURL:]載入其它應用

轉載自:http://blog.csdn.net/hengshujiyi/article/details/21172127 在iOS開發中,經常需要呼叫其它App,如撥打電話、傳送郵件等。UIApplication:openURL:方法是實現這一目的的最簡單方法,該方法

iOS中[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@""]]的使用

使用系統自帶功能,傳送簡訊、撥打電話、傳送郵件、開啟網站 // 呼叫自帶mail [[UIApplication sharedApplication] openURL:[NSURL URLWithSt

SSM:spring+springmvc+mybatis框架中的XML配置文件功能詳細解釋

con initial -m and 整理 .get 尺寸 internal 頁面 SSM:spring+springmvc+mybatis框架中的XML配置文件功能詳細解釋 2016-04-14 23:40 13030人閱讀 評論(2) 收藏 舉報

set_include_path詳細解釋(轉)

好處 name efi conn 方便 ooo pre def define 首先我們來看這個全局變量:__FILE__它表示文件的完整路徑(當然包括文件名在內)也就是說它根據你文件所在的目錄不同,有著不同的值;當然,當它用在包行文件中的時候,它的值是包含的路徑;然

Sed命令的使用詳細解釋

lin 格式 next printing 操作 模式匹配 oot att mman Sed命令的使用詳細解釋 一:sed命令的簡介 sed是一種在線編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用s

spring 中註解的詳細解釋之@Responsebody與@RequestBody

可用 gif com .com profile 而是 ping get orm 1、@responseBoby @Responsebody與@RequestBody 一、預備知識:@RequestMapping RequestMapping是一個用來處理請求地

貪吃蛇大作戰單人版完整代碼以及詳細解釋

route 一個 next 與此同時 con cti black cor 判斷 貪吃蛇總結: 1. 創建WPF應用程序 2. 添加Canvas標簽。Name=back; 3. 添加loaded事件 4. 在loaded事件中創建蛇(設置蛇的位置,大小,顏色)

開發微信公眾賬號報錯 返回碼詳細解釋

token 版本號 gpo border ces appid open cell 接口調用 返回碼說明 -1 系統繁忙 0 請求成功 40001 驗證失敗 40002 不合法的憑證類型 40003 不合法的OpenID 40004 不合法的媒體文件

crontab詳細解釋

環境變量 一個 ech gpo 變量 use 第幾天 tab 用戶 基本格式 : *  *  *  *  *  command 分 時 日 月 周 命令 第1列表示分鐘1~59 每分鐘用*或者 */1表示 第2列表示小時1~23(0表示0點) 第3列表示日期1~31 第4列

http請求頭和響應頭詳細解釋

pad 使用 after 網絡資源 max OS lai 通信 緩存 想對http請求頭和響應頭有更細致的了解,請看如下 Requests部分 Header解釋示例 Accept 指定客戶端能夠接收的內容類型 Accept: text/plain, text/html

python腳本+iftop捕捉網卡帶寬峰值監控發送郵件通知(詳細解釋,適合python新司機上路)

python+iftop監控網卡帶寬監控剛剛.....就在剛剛,我給自己跪了。原本想運行crontab -e 添加一個任務定時來監控服務器網卡帶寬峰值,莫名其妙按了個r。沒錯!就是crontab -r 這種操做。原本30多條定時任務的配置記錄被清空了,還不帶備份。瞬間,懵逼了,這個是線上環境。我不想說話,默默

Paxos協議超級詳細解釋+簡單實例

sso 使用 paxos basic 同步 有意 AR 接收消息 pro 轉載自: https://blog.csdn.net/cnh294141800/article/details/53768464 Paxos協議超級詳細解釋+簡單實例 Basic-Paxos

轉,ffmpeg參數中文詳細解釋

計算 格式 sam copyright car type 類型 選擇 置頂 a) 通用選項-L license-h 幫助-fromats 顯示可用的格式,編解碼的,協議的...-f fmt 強迫采用格式fmt-I filename 輸入文件-y 覆蓋輸出文件-t durat

PPTP電腦XP端設置超詳細解釋

PPTP 派克斯華科自主研發將近兩年的時間,打破了市面上PPTP方案,最前沿的技術方案,非市面泛濫的ROS技術方案。提高了穩定性和速度,帶寬利用率達到最大化。pptp電腦端XP系統設置教程如下: 打開網絡連接,創建一個新的鏈接第一步 第二步 第三步 第四步第五步第六步 具體參數設置如下圖1,點擊屬性如圖點擊安

DAPP超詳細解釋

但我 部分 是不是 兩個 節點 維護 開啟 合約 引入 一、DAPP到底是個什麽玩意?DAPP是Decentralized Application的縮寫,翻譯過來就是去中心化應用,也稱為分布式應用。它之所以被認為開啟了區塊鏈3.0時代,是因為DAPP與我們當前所認識到的AP