UIApplication

UIApplication

UIApplication

UIApplication 類在整個 apps 運(yùn)行過程中,扮演一個中央處理和協(xié)調(diào)的工作墩划,任何程序應(yīng)該只有一個 UIApplication 實(shí)例涕刚,當(dāng)一個app 被推出時,系統(tǒng)會調(diào)用 UIApplicationMain 函數(shù)乙帮,在它的其它任務(wù)中杜漠,這個函數(shù)創(chuàng)建了一個單利 UIApplication 對象,此后察净,你可以調(diào)用 shareApplication 方法來獲取此對象驾茴。

此外,UIApplication 還處理著用戶的觸摸事件氢卡,分發(fā) action message 到它擁有的合適的目標(biāo)對象上锈至。應(yīng)用程序?qū)ο缶S持一個打開的窗口列表,通過這個列表可以檢索應(yīng)用程序的任何 UIView 對象译秦。

UIApplication 定義一個 delegate 對象峡捡,遵循 UIApplicationDelegate 協(xié)議,AppDelegate而且必須執(zhí)行某些相關(guān)的協(xié)議方法筑悴。此外们拙,應(yīng)用程序?qū)ο笸ㄖ@個代理對象一些很重要的運(yùn)行時候的事件,比如app推出雷猪,內(nèi)存緊張睛竣,app 終止等。

應(yīng)用程序聯(lián)合處理一些資源求摇,如 email射沟, 圖片文件等,通過openURL: 方法与境,例如一個app調(diào)用 eamil url验夯, 通過調(diào)用 open URL,可以喚醒 Mail app摔刁。

用UIApplication 相關(guān)的API可以管理設(shè)備的特定行為挥转。如下所示:

  • 暫停觸摸事件 beginIgnoringInteractionEvents

  • 注冊遠(yuǎn)程推送 unregisterForRemoteNotifications

  • 觸發(fā) undo-redo UI applicationSupportsShakeToEdit

  • 確定是否有一個安裝程序處理 URL scheme canOpenURL:

  • 擴(kuò)展App應(yīng)用程序的執(zhí)行,以便它可以在后臺完成一個任務(wù)beginBackgroundTaskWithExpirationHandler:, beginBackgroundTaskWithName:expirationHandler:

  • 添加和取消本地的通知 scheduleLocalNotification:, cancelLocalNotification:

  • 協(xié)調(diào)遙控接收事件 beginReceivingRemoteControlEvents, endReceivingRemoteControlEvents

  • 執(zhí)行app-level狀態(tài)恢復(fù)任務(wù) methods in the Managing the State Restoration Behavior task group

獲得實(shí)例
 + (UIApplication *)sharedApplication 
 // 返回應(yīng)用單個實(shí)例
獲得 app delegate
 @property(nonatomic, assign) id< UIApplicationDelegate > delegate
 // 這個應(yīng)用的代理
獲得 app Windows
 @property(nonatomic, readonly) UIWindow *keyWindow
 // app的主 window
 
 @property(nonatomic, readonly) NSArray <__kindof UIWindow *> *windows
 // 隱藏的和看得見的所有 window
控制和處理事件
 - (void)sendEvent:(UIEvent *)event
 // 發(fā)送事件給app內(nèi)適用的響應(yīng)者
 
 - (BOOL)sendAction:(SEL)action
            to:(id)target
          from:(id)sender
      forEvent:(UIEvent *)event
 // 發(fā)送一個含選擇器的動作消息到指定的目標(biāo)
 
 - (void)beginIgnoringInteractionEvents
 // 告訴接受者暫停處理 touch相關(guān)的事件
 
 - (void)endIgnoringInteractionEvents
 // 告訴接受者繼續(xù)處理 touch相關(guān)的事件
 
 - (BOOL)isIgnoringInteractionEvents
 // 是否忽略交互事件
 
 @property(nonatomic) BOOL applicationSupportsShakeToEdit
 // 是否接受搖晃的時候, 展現(xiàn) 撤銷和恢復(fù) 視圖
打開 url 資源
 - (BOOL)openURL:(NSURL *)url
 // 通過特定的URL中打開資源

 - (BOOL)canOpenURL:(NSURL *)url
 // 返回一個bool值绑谣, 是否從已經(jīng)安裝的 apps 中跳轉(zhuǎn)
配置用戶通知設(shè)置
 - (void)registerUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
 // 注冊可選的通知
 
 - (UIUserNotificationSettings *)currentUserNotificationSettings
 // 返回關(guān)于 user 對于這個app的通知設(shè)置
注冊遠(yuǎn)程通知
 - (void)registerForRemoteNotifications
 // 注冊接受的遠(yuǎn)程通知党窜,這些通知經(jīng)由 APNS 發(fā)出
 
 - (void)unregisterForRemoteNotifications
 // 注銷掉遠(yuǎn)程通知
 
 - (BOOL)isRegisteredForRemoteNotifications
 // 表明是否已經(jīng)注冊過了遠(yuǎn)程通知
注冊本地通知
 - (void)scheduleLocalNotification:(UILocalNotification *)notification
 // 安排當(dāng)?shù)氐谋镜赝ㄖ庋b了日期和時間
 
 - (void)presentLocalNotificationNow:(UILocalNotification *)notification
 // 立刻彈出本地通知
 
 - (void)cancelLocalNotification:(UILocalNotification *)notification
 // 取消預(yù)定的交付的本地通知
 
 - (void)cancelAllLocalNotifications
 // 取消所有的預(yù)定的本地通知
 
 @property(nonatomic, copy) NSArray <UILocalNotification *> *scheduledLocalNotifications
 // 目前的宿友的預(yù)定的本地通知
控制后臺擴(kuò)展
@property(nonatomic, readonly) UIApplicationState applicationState
// app當(dāng)前的運(yùn)行的狀態(tài)

@property(nonatomic, readonly) NSTimeInterval backgroundTimeRemaining
// app 在后臺運(yùn)行的時間

@property(nonatomic, readonly) UIBackgroundRefreshStatus backgroundRefreshStatus
// 進(jìn)入到后臺借宵,因此能夠進(jìn)行后臺的操作

- (void)setMinimumBackgroundFetchInterval:(NSTimeInterval)minimumBackgroundFetchInterval
// 指定最小時間間隔在后臺獲取操作

- (UIBackgroundTaskIdentifier)beginBackgroundTaskWithName:(NSString *)taskName
                                    expirationHandler:(void (^)(void))handler
// 標(biāo)記新的長時間運(yùn)行的任務(wù)以及指定任務(wù)的命名

- (UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler:(void (^)(void))handler
// 標(biāo)記開始心的長時間運(yùn)行的后臺任務(wù)

- (void)endBackgroundTask:(UIBackgroundTaskIdentifier)identifier
// 結(jié)束指定的長時間的后臺任務(wù)

@property(nonatomic, getter=isIdleTimerDisabled) BOOL idleTimerDisabled
// 一個bool值 確定控制器是否停止運(yùn)行在空閑的時間
控制狀態(tài)恢復(fù)
- (void)extendStateRestoration
// 異步恢復(fù)狀態(tài)

- (void)completeStateRestoration
// 結(jié)束異步恢復(fù)狀態(tài)

- (void)ignoreSnapshotOnNextApplicationLaunch
// 阻止應(yīng)用程序使用最近的快找圖像幌衣,在接下來的循環(huán)中
 
+ (void)registerObjectForStateRestoration:(id<UIStateRestoring>)object
                restorationIdentifier:(NSString *)restorationIdentifier    
// 注冊自定義對象的使用狀態(tài)恢復(fù)系統(tǒng)
控制 Home Screen 和 3D Touch
@property(nonatomic, copy) NSArray <UIApplicationShortcutItem *> *shortcutItems
// 重置此變量,設(shè)置一系列的 quick actions 用于3Dtouch展現(xiàn)
注冊遙控事件
- (void)beginReceivingRemoteControlEvents
// 告訴app 開始接受遙控事件

- (void)endReceivingRemoteControlEvents
// 告訴app 結(jié)束接受遙控事件
控制應(yīng)用程序外觀
@property(nonatomic, readonly) CGRect statusBarFrame
// 獲取狀態(tài)欄的 rect

@property(nonatomic, getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible
// 是否指示網(wǎng)絡(luò)活動壤玫,默認(rèn)是NO

@property(nonatomic) NSInteger applicationIconBadgeNumber
// 未讀消息數(shù)字

@property(nonatomic, readonly) UIUserInterfaceLayoutDirection userInterfaceLayoutDirection
// 返回用戶界面的布局方向豁护。
控制默認(rèn)的方向
- (UIInterfaceOrientationMask)supportedInterfaceOrientationsForWindow:(UIWindow *)window
// 在指定的窗口中, 返回默認(rèn)的視圖控制器方向接口 
控制狀態(tài)欄方向
@property(nonatomic, readonly) NSTimeInterval statusBarOrientationAnimationDuration
// 狀態(tài)欄動畫持續(xù)時間
字體大小偏好
@property(nonatomic, readonly) NSString *preferredContentSizeCategory
// 字體偏好
數(shù)據(jù)類型
UIBackgroundTaskIdentifier;
// 一個獨(dú)特的標(biāo)志欲间,這個標(biāo)志用于在后臺請求運(yùn)行


UIRemoteNotificationType
// 指示應(yīng)用程序的通知類型
typedef enum : NSUInteger {
   UIRemoteNotificationTypeNone    = 0,
   UIRemoteNotificationTypeBadge   = 1 << 0,
   UIRemoteNotificationTypeSound   = 1 << 1,
   UIRemoteNotificationTypeAlert   = 1 << 2,
   UIRemoteNotificationTypeNewsstandContentAvailability = 1 << 3
} UIRemoteNotificationType;


UIStatusBarStyle
// 狀態(tài)欄的樣式
 typedef enum : NSInteger {
    UIStatusBarStyleDefault,         // 黑色狀態(tài)楚里,用于白背景
    UIStatusBarStyleLightContent,    // light 狀態(tài), 用于dark 背景

    UIStatusBarStyleBlackTranslucent, // 7.0 棄用
    UIStatusBarStyleBlackOpaque       // 7.0 棄用
 } UIStatusBarStyle;
 

UIStatusBarAnimation
// 在狀態(tài)欄隱藏于顯現(xiàn)之間的動畫
 typedef enum : NSInteger {
    UIStatusBarAnimationNone,     
    UIStatusBarAnimationFade,     
    UIStatusBarAnimationSlide,
 } UIStatusBarAnimation;
常量(Constants)
UIApplicationState  // 應(yīng)用狀態(tài)
typedef enum : NSInteger {
   UIApplicationStateActive,
   UIApplicationStateInactive,
   UIApplicationStateBackground 
} UIApplicationState;


在后臺運(yùn)行時候常用的常量
const UIBackgroundTaskIdentifier UIBackgroundTaskInvalid;
// 無效的后臺任務(wù)
const NSTimeInterval UIMinimumKeepAliveTimeout;
// 后臺保持的最小的時間


 
UIBackgroundFetchResult
// 后臺請求結(jié)果
typedef enum : NSUInteger {
   UIBackgroundFetchResultNewData,
   UIBackgroundFetchResultNoData,
   UIBackgroundFetchResultFailed 
} UIBackgroundFetchResult;

 
Fetch Intervals 
// 請求間隔
const NSTimeInterval UIApplicationBackgroundFetchIntervalMinimum; // 系統(tǒng)支持的最小的間隔
const NSTimeInterval UIApplicationBackgroundFetchIntervalNever;   // 最大間隔猎贴, 以阻止請求

 
 
UIBackgroundRefreshStatus
typedef enum : NSUInteger {
   UIBackgroundRefreshStatusRestricted,  // 限制 
   UIBackgroundRefreshStatusDenied,      // 否定
   UIBackgroundRefreshStatusAvailable    // 可用
} UIBackgroundRefreshStatus; 



UIInterfaceOrientation
// 應(yīng)用程序的用戶界面方向
typedef enum : NSInteger {
   UIInterfaceOrientationUnknown            = UIDeviceOrientationUnknown,
   UIInterfaceOrientationPortrait           = UIDeviceOrientationPortrait,
   UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
   UIInterfaceOrientationLandscapeLeft      = UIDeviceOrientationLandscapeRight,
   UIInterfaceOrientationLandscapeRight     = UIDeviceOrientationLandscapeLeft 
} UIInterfaceOrientation;



UIInterfaceOrientationMask
// 指定一個視圖控制器支持的接口方向千绪。
typedef enum : NSUInteger {
   UIInterfaceOrientationMaskPortrait = (1 << UIInterfaceOrientationPortrait ),
   UIInterfaceOrientationMaskLandscapeLeft = (1 << UIInterfaceOrientationLandscapeLeft ),
   UIInterfaceOrientationMaskLandscapeRight = (1 << UIInterfaceOrientationLandscapeRight ),
   UIInterfaceOrientationMaskPortraitUpsideDown = (1 << UIInterfaceOrientationPortraitUpsideDown ),
   UIInterfaceOrientationMaskLandscape = (UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight ),
   UIInterfaceOrientationMaskAll = (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft |
   UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortraitUpsideDown ),
   UIInterfaceOrientationMaskAllButUpsideDown = (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft |
   UIInterfaceOrientationMaskLandscapeRight ),
} UIInterfaceOrientationMask;



 UserInfo Dictionary Keys
 // 這些鍵值用來接受用戶信息字典伶氢,用于訪問值一些UIApplication-posted通知疮茄。
 NSString *const UIApplicationStatusBarOrientationUserInfoKey;
 NSString *const UIApplicationStatusBarFrameUserInfoKey;
 
 
 
 Content Size Category Constants // 內(nèi)容大笑類別常量
 NSString *const UIContentSizeCategoryExtraSmall;
 NSString *const UIContentSizeCategorySmall;
 NSString *const UIContentSizeCategoryMedium;
 NSString *const UIContentSizeCategoryLarge;
 NSString *const UIContentSizeCategoryExtraLarge;
 NSString *const UIContentSizeCategoryExtraExtraLarge;
 NSString *const UIContentSizeCategoryExtraExtraExtraLarge;


 // 內(nèi)容尺寸改變的通知的key
 NSString *const UIContentSizeCategoryNewValueKey;
通知
 UIApplicationBackgroundRefreshStatusDidChangeNotification 
 // 在后臺下載內(nèi)容的應(yīng)用程序的狀態(tài)變化時候通知
 
 UIApplicationDidBecomeActiveNotification
 // 當(dāng)程序變的活躍之后
 
 UIApplicationDidChangeStatusBarFrameNotification
 // 當(dāng)狀態(tài)欄frame 改變時候
 
 UIApplicationDidChangeStatusBarOrientationNotification
 // 當(dāng)用戶方向改變時候
 
 
 UIApplicationDidEnterBackgroundNotification
 // 當(dāng)app已經(jīng)進(jìn)入后臺之后
 
 
 UIApplicationDidFinishLaunchingNotification
 // 當(dāng)app完全推出之后
  
 UIApplicationDidReceiveMemoryWarningNotification
 // 當(dāng)應(yīng)用內(nèi)存緊張之后
 
 UIApplicationProtectedDataDidBecomeAvailable
 // 但受保護(hù)的文件進(jìn)入活躍狀態(tài)
 
 UIApplicationProtectedDataWillBecomeUnavailable
 // 當(dāng)被保護(hù)的文件進(jìn)入不活躍狀態(tài)
 
 UIApplicationUserDidTakeScreenshotNotification
 // 當(dāng)截屏的時候
 
 UIApplicationWillChangeStatusBarOrientationNotification
 // 當(dāng)應(yīng)用程序?qū)⒁淖兤浣涌诜较? 
 UIApplicationWillChangeStatusBarFrameNotification
 // 當(dāng)應(yīng)用將要改變狀態(tài)來frame 
 
 UIApplicationWillEnterForegroundNotification
 // 當(dāng)應(yīng)用程序從后臺將要進(jìn)入前臺
 
 UIApplicationWillResignActiveNotification
 // 應(yīng)用程序不再主動和失去焦點(diǎn)伦吠。

 UIApplicationWillTerminateNotification
 // 當(dāng)應(yīng)用程序?qū)⒁K止。
 
 UIContentSizeCategoryDidChangeNotification
 // 當(dāng)用戶更改內(nèi)容大小的偏好設(shè)置
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惹骂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子做瞪,更是在濱河造成了極大的恐慌对粪,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件装蓬,死亡現(xiàn)場離奇詭異著拭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)牍帚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門儡遮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人暗赶,你說我怎么就攤上這事鄙币。” “怎么了蹂随?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵十嘿,是天一觀的道長。 經(jīng)常有香客問我岳锁,道長绩衷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮咳燕,結(jié)果婚禮上勿决,老公的妹妹穿的比我還像新娘。我一直安慰自己招盲,他們只是感情好低缩,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宪肖,像睡著了一般表制。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上控乾,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天么介,我揣著相機(jī)與錄音,去河邊找鬼蜕衡。 笑死壤短,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的慨仿。 我是一名探鬼主播久脯,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼镰吆!你這毒婦竟也來了帘撰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤万皿,失蹤者是張志新(化名)和其女友劉穎摧找,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牢硅,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蹬耘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了减余。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片综苔。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖位岔,靈堂內(nèi)的尸體忽然破棺而出如筛,到底是詐尸還是另有隱情,我是刑警寧澤赃承,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布妙黍,位于F島的核電站,受9級特大地震影響瞧剖,放射性物質(zhì)發(fā)生泄漏拭嫁。R本人自食惡果不足惜可免,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望做粤。 院中可真熱鬧浇借,春花似錦、人聲如沸怕品。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肉康。三九已至闯估,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吼和,已是汗流浹背涨薪。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炫乓,地道東北人刚夺。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像末捣,于是被迫代替她去往敵國和親侠姑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容