1. 程式人生 > >IOS程式啟動原理(啟動過程)、UIApplication(main.m與自動生成的AppDelegate代理)

IOS程式啟動原理(啟動過程)、UIApplication(main.m與自動生成的AppDelegate代理)

(1)UIApplication物件是應用程式的象徵,一個UIApplication物件就代表一個應用程式。

(2)每一個應用都有自己的UIApplication物件,而且是單例的,如果試圖在程式中新建一個UIApplication物件,那麼將報錯提示。

(3)通過[UIApplicationsharedApplication]可以獲得這個單例物件

(4) 一個iOS程式啟動後建立的第一個物件就是UIApplication物件,且只有一個(通過程式碼獲取兩個UIApplication物件,列印地址可以看出地址是相同的)。

(5)利用UIApplication物件,能進行一些應用級別的操作

2.應用級別的操作示例:

1)設定應用程式圖示右上角的紅色提醒數字(如QQ訊息的時候,圖示上面會顯示1,2,3條新資訊等。)

@property(nonatomic) NSInteger applicationIconBadgeNumber;

程式碼實現和效果: 

複製程式碼
- (void)viewDidLoad
{
    [super viewDidLoad];
    //建立並新增一個按鈕
    UIButton *btn=[[UIButton alloc]initWithFrame:CGRectMake(100, 100, 60, 30)];
    [btn setTitle:@"按鈕" forState:UIControlStateNormal];
    [btn setBackgroundColor:[UIColor brownColor]];
    [btn addTarget:self action:@selector(onClick) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
}
-(void)onClick { NSLog(@"按鈕點選事件"); //錯誤,只能有一個唯一的UIApplication物件,不能再進行建立 // UIApplication *app=[[UIApplication alloc]init]; //通過sharedApplication獲取該程式的UIApplication物件 UIApplication *app=[UIApplication sharedApplication]; app.applicationIconBadgeNumber=123; }
複製程式碼

2)設定聯網指示器的可見性

@property(nonatomic,getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible;

程式碼和效果: 

  //設定指示器的聯網動畫
    app.networkActivityIndicatorVisible=YES;

3)管理狀態列

從iOS7開始,系統提供了2種管理狀態列的方式

a.通過UIViewController管理(每一個UIViewController都可以擁有自己不同的狀態列).

在iOS7中,預設情況下,狀態列都是由UIViewController管理的,UIViewController實現下列方法就可以輕鬆管理狀態列的可見性和樣式

狀態列的樣式     - (UIStatusBarStyle)preferredStatusBarStyle; 

狀態列的可見性  -(BOOL)prefersStatusBarHidden;

複製程式碼
#pragma mark-設定狀態列的樣式
-(UIStatusBarStyle)preferredStatusBarStyle
{
    //設定為白色
    //return UIStatusBarStyleLightContent;
    //預設為黑色
     return UIStatusBarStyleDefault;
}
#pragma mark-設定狀態列是否隱藏(否)
-(BOOL)prefersStatusBarHidden
{
    return NO;
}
複製程式碼

b.通過UIApplication管理(一個應用程式的狀態列都由它統一管理)

如果想利用UIApplication來管理狀態列,首先得修改Info.plist的設定

 

程式碼:

複製程式碼
  //通過sharedApplication獲取該程式的UIApplication物件
    UIApplication *app=[UIApplication sharedApplication];
    app.applicationIconBadgeNumber=123;
    
    //設定指示器的聯網動畫
    app.networkActivityIndicatorVisible=YES;
    //設定狀態列的樣式
    //app.statusBarStyle=UIStatusBarStyleDefault;//預設(黑色)
    //設定為白色+動畫效果
      [app setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
    //設定狀態列是否隱藏
    app.statusBarHidden=YES;
      //設定狀態列是否隱藏+動畫效果
    [app setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
複製程式碼

c.補充

既然兩種都可以對狀態列進行管理,那麼什麼時候該用什麼呢? 如果狀態列的樣式只設置一次,那就用UIApplication來進行管理; 如果狀態列是否隱藏,樣式不一樣那就用控制器進行管理。 UIApplication來進行管理有額外的好處,可以提供動畫效果。

 4)openURL:方法

UIApplication有個功能十分強大的openURL:方法

- (BOOL)openURL:(NSURL*)url;

openURL:方法的部分功能有

打電話  UIApplication *app = [UIApplicationsharedApplication]; [app openURL:[NSURLURLWithString:@"tel://10086"]];

發簡訊  [app openURL:[NSURLURLWithString:@"sms://10086"]];

發郵件  [app openURL:[NSURLURLWithString:@"mailto://[email protected]"]];

開啟一個網頁資源 [app openURL:[NSURLURLWithString:@"http://ios.itcast.cn"]];

開啟其他app程式   openURL方法,可以開啟其他APP。

 URL補充: URL:統一資源定位符,用來唯一的表示一個資源。 URL格式:協議頭://主機地址/資源路徑 網路資源:http/ ftp等   表示百度上一張圖片的地址   http://www.baidu.com/images/20140603/abc.png 本地資源:file:///users/apple/desktop/abc.png(主機地址省略)

相關推薦

IOS程式啟動原理啟動過程UIApplicationmain.m自動生成AppDelegate代理

(1)UIApplication物件是應用程式的象徵,一個UIApplication物件就代表一個應用程式。 (2)每一個應用都有自己的UIApplication物件,而且是單例的,如果試圖在程式中新建一個UIApplication物件,那麼將報錯提示。 (3)通過[UIApplicationsharedA

Eureka--2第一個Eureka程式,Eureka Client的自啟動原理和簡要過程

在之前的Spring Cloud Config的基礎上,搭建簡單的Eureka Server 沒有程式碼,很多試驗做不起來,我們先建立個Eureka Server再說。 本篇主要講如何建立Eureka Server和Eureka Client,還有個重點是通過原始碼分析E

iOS-獲取Model設備型號Version設備版本app程序版本

popu device style post short tar .html tex system IOS-獲取Model(設備型號)、Version(設備版本)、app(程序版本)等 NSLog(@"uniqueIdentifier: %@", [[UI

iOS調用系統通訊錄(適配iOS9iOS10)轉載

tpi determine getc dispatch play bridge osi n) text2 由於系統的通訊錄在iOS9的時候提供了新的api,所以我們2種框架都使用。首先我們要導入框架: /// iOS 9前的框架 #import <Address

【小家java】POP面向過程程式設計OOP面向物件程式設計AOP面向切面程式設計三種程式設計思想的區別和聯絡

相關閱讀 【小家java】java5新特性(簡述十大新特性) 重要一躍 【小家java】java6新特性(簡述十大新特性) 雞肋升級 【小家java】java7新特性(簡述八大新特性) 不溫不火 【小家java】java8新特性(簡述十大新特性) 飽受讚譽 【小家java】java9

【Spring Boot】19Spring Boot嵌入式Servlet容器自動配置原理

    其中EmbeddedServletContainerAutoConfiguration是嵌入式Servlet容器的自動配置類,該類在spring-boot-autoconfigure-xxx.jar中的web模組可以找到。 @AutoConfig

iOS 分類category類擴充套件extension協議protocol

分類 category 使用場景分析 1.擴充套件已有的類 有大量的子類,需要新增公用方法,但又無法修改它們的父類的情形(如系統類)。 一般是大量的功能程式碼已經形成,使用子類需要新增新類的標頭檔案等。分類只能新增方法,不能新增屬性。(下文會提到如何新增屬性)2.使用父類私有方法 已經存在了

習題 12.4 寫一個程式,定義抽象基類Shape,由它派生出3個派生類:Circle圓形Rectangle矩形Triangle三角形,用一個函式printArea分別輸出以上。。。

C++程式設計(第三版) 譚浩強 習題12.4 個人設計 習題 12.4 寫一個程式,定義抽象基類Shape,由它派生出3個派生類:Circle(圓形)、Rectangle(矩形)、Triangle(三

Delphi:記錄型別過程指標函式方法指標欄位的應用

       由於工作關係使用delphi已經有一年時間,在使用中我也在不斷的摸索,在以後的實踐中我會陸續把心得寫下來,以備查閱。本文的主題是Delphi中 record型別使用中的幾點總結。        我們知道Delphi的記錄型別與C/C++的struct型別有相似

C++函式的隱藏遮蔽覆蓋override,即重寫,多型的實現原理過載overload)

零、前言 (1)函式過載發生在同一個類或頂層函式中,同名的函式而具有不同的引數列表 (2)函式覆蓋(重寫)發生在繼承層次中,該函式在父類中必須是virtual,而子類的該函式必須與父類有相同的引數列表 (3)函式**隱藏(遮蔽)**發生在繼承層次中,父類和子類同

iOS開發之CGPointCGSizeCGRectCGRectMakewindow視窗檢視view

一)三個結構體:CGPoint、CGSize、CGRect 1.  CGPoint /* Points. */   struct CGPoint {     CGFloat x;     CGFloat y;   };   typedef struct CGPoi

從矩陣matrix角度討論PCAPrincipal Component Analysis 主成分分析SVDSingular Value Decomposition 奇異值分解相關原理

0. 引言 本文主要的目的在於討論PAC降維和SVD特徵提取原理,圍繞這一主題,在文章的開頭從涉及的相關矩陣原理切入,逐步深入討論,希望能夠學習這一領域問題的讀者朋友有幫助。 這裡推薦Mit的Gilbert Strang教授的線性代數課程,講的非常好,循循善誘,深入淺出。 Relevant Link:&

FSM狀態機HFSM分層狀態機BT行為樹的區別

分類 log 巡邏 其中 感到 人工智能 執行者 跳轉 藍色 遊戲人工智能AI中最常聽見的就是這三個詞: FSM 這個不用說拉,百度一大堆解釋, 簡單將就是將遊戲AI行為分為一個一個的狀態,狀態與狀態之間的過渡通過事件的觸發來形成。 比如士兵的行為有“巡邏”,“追擊敵人”,

Echoprintprint_r區別

表達式 類型變量 一個 pri truct ray echo 格式化 輸出 echo可以一次輸出多個值,多個值之間用逗號分隔。echo是語言結構(language construct),而並不是真正的函數,因此不能作為表達式的一部分使用。echo是php的內部指令,不是函

Android 音頻采集——MediaRecord編碼後錄影文件 AudioRecordPCM原始數據

listen ext 根據 任務 nbsp too 影響 按鈕 red http://blog.csdn.net/java_android_c/article/details/52619737 Android 音頻簡介 常見的音頻編解碼的類型:AAC OPUS MP3

Java的位運算符詳解實例——&~|異或^僅作記錄

out 位運算符 異或運算 pri stat 運算 data 操作 amp 位運算符主要針對二進制,它包括了:“與”、“非”、“或”、“異或”。從表面上看似乎有點像邏輯運算符,但邏輯運算符是針對兩個關系運算符來進行邏輯運算,而位運算符主要針對兩個二進制數的位進行邏輯運算。下

jquery過濾選擇器-----------表單對象屬性過濾選擇器 表單選擇器

images alt 分享 wid image logs jquery query 器) 1.表單對象屬性選擇器    2.程序 3.表單選擇器    jquery過濾選擇器-----------(表單對象屬性過濾選擇器 與 表單選擇器)

C語言中存儲類別又分為四類:自動auto靜態static寄存器的register和外部的extern

字符變量 修飾 例如 register ext 進行 適合 sta -- 除法運算中註意: 如果相除的兩個數都是整數的話,則結果也為整數,小數部分省略,如8/3 = 2;而兩數中有一個為小數,結果則為小數,如:9.0/2 = 4.500000。 取余運算中註意: 該運算只適

08.SQL Server 基本操作【分離脫機附加聯機

原因 -1 文件的操作 刪除 方法 附加 文件 技術分享 屬性 1、創建、刪除(對準數據庫右鍵)2、分離(脫機)、附加(聯機) 關於附加數據庫失敗的處理:原因:對文件的操作權限不夠處理方法:對準mdf文件和ldf文件 右鍵 屬性 安全性將 用戶 Users