1. NSRunLoop的實現機制,及在多線程中如何使用
NSRunLoop是IOS消息機制的處理模式
>1.NSRunLoop的主要作用:控制NSRunLoop裏面線程的執行和休眠,在有事情做的時候使當前NSRunLoop控制的線程工作,沒有事情做讓當前NSRunLoop的控制的線程休眠。
>2.NSRunLoop 就是一直在循環檢測,從線程start到線程end,檢測inputsource(如點擊,雙擊等操作)同步事件,檢測timesource同步事件,檢測到輸入源會執行處理函數,首先會產生通知,corefunction向線程添加runloop observers來監聽事件,意在監聽事件發生時來做處理。
>3.runloopmode是一個集合,包括監聽:事件源,定時器,以及需通知的runloop observers
>1. 只有在爲你的程序創建次線程的時候,才需要運行run loop。對於程序的主線程而言,run loop是關鍵部分。Cocoa提供了運行主線程run loop的代碼同時也會自動運行run loop。IOS程序UIApplication中的run方法在程序正常啓動的時候就會啓動run loop。如果你使用xcode提供的模板創建的程序,那你永遠不需要自己去啓動run loop
>2. 在多線程中,你需要判斷是否需要runloop。如果需要run loop,那麼你要負責配置run loop並啓動。你不需要在任何情況下都去啓動run loop。比如,你使用線程去處理一個預先定義好的耗時極長的任務時,你就可以毋需啓動run loop。Run loop只在你要和線程有交互時才需要
2.IOS7之前,後臺執行內容有幾種形式,都是什麼
一般的應用在進入後臺的時候可以獲取一定時間來運行相關任務,也就是說可以在後臺運行一小段時間(10S左右)。
1. 後臺播放音樂
2. 後臺GPS跟蹤
3. 後臺voip支持
3簡單說一下APP的啓動過程,從main文件開始說起
程序啓動分爲兩類:1.有storyboard2.沒有storyboard
有storyboard情況下:
1.main函數
2.UIApplicationMain
* 創建UIApplication對象
* 創建UIApplication的delegate對象
3.根據Info.plist獲得最主要storyboard的文件名,加載最主要的storyboard(有storyboard)
* 創建UIWindow
* 創建和設置UIWindow的rootViewController
* 顯示窗口
沒有storyboard情況下:
1.main函數
2.UIApplicationMain
* 創建UIApplication對象
* 創建UIApplication的delegate對象
3.delegate對象開始處理(監聽)系統事件(沒有storyboard)
* 程序啓動完畢的時候, 就會調用代理的application:didFinishLaunchingWithOptions:方法
* 在application:didFinishLaunchingWithOptions:中創建UIWindow
* 創建和設置UIWindow的rootViewController
* 顯示窗口
4把程序自己關掉和程序進入後臺,遠程推送的區別
1. 關掉後不執行任何代碼,不能處理事件
2. 應用程序進入後臺狀態不久後轉入掛起狀態。在這種狀態下,應用程序不執行任何代碼,並有可能在任意時候從內存中刪除。只有當用戶再次運行此應用,應用纔會從掛起狀態喚醒,代碼得以繼續執行.或者進入後臺時開啓多任務狀態,保留在內存中,這樣就可以執行系統允許的動作
3. 遠程推送是由遠程服務器上的程序發送到APNS,再由APNS把消息推送至設備上的程序,當應用程序收到推送的消息會自動調用特定的方法執行事先寫好的代碼
5本地通知和遠程推送通知對基本概念和用法?
本地通知和遠程推送通知都可以向不在前臺運行的應用發送消息,這種消息既可能是即將發生的事件,也可能是服務器的新數據.不管是本地通知還是遠程通知,他們在程序界面的顯示效果相同,都可能顯示爲一段警告信息或應用程序圖標上的微章.
本地通知和遠程推送通知的基本目的都是讓應用程序能夠通知用戶某些事情, 而且不需要應用程序在前臺運行.二者的區別在於本地通知由本應用負責調用,只能從當前設備上的iOS發出, 而遠程通知由遠程服務器上的程序發送到APNS,再由APNS把消息推送至設備上的程序