iPhone 開發概述
### iPhone開發概述
沙箱機制( sandbox)iOS 中的沙箱機制( Sandbox) 是一種安全體系,它規定了應用程式只能在為該應用程式建立的檔案夾內讀取檔案,不可以訪問其他地方的內容.所有的非代碼檔案都儲存在這個地方,比片、聲音、屬性列表和文字檔等。 每一個應用程式都在自己的沙箱內 不能隨意跨越自己的沙箱去訪問別人的沙箱的內容 應用程式向外請求或者接收資料都需要經過許可權認證應用程式的五種狀態Not runing( 未運行) 程式沒啟動 Inactive (未啟用) 程式在前台運行,不過沒有接收到事件.在沒有事件處理情況下程式通常停留在這個狀態 Active (啟用) 程式在前台運行而且接收到了事件.這也是前台的一個正常的模式 Background (後台) 程式在後台而且能執行代碼,大多數程式進入這個狀態後會在這個狀態上停留一會. 時間到了之後會進入掛起狀態( Suspended). 有的程式經過特殊的請求後可以長期處於 Background 狀態. Suspended (掛起) 程式在後台不能執行代碼.系統會自動把程式變成這個狀態而且不會再發出通知.當掛起時,程式還是停留在記憶體中的,當程式記憶體應用狀態的生命週期
iOS 載入 app 將要結束時並且 app 程式差不多已經準備好啟動並執行時候會調用這個方法,通常我們需要使用這個方法來完成 app 的初始化和最後設定的一些微調.這個方法調用發生在 app 的 window 和 UI 之前.
- (BOOL)application:(UIApplication *)application didFinishLanunchingWithOption:(NSDictionary *)LaunchOptions
當應用程式將要進入非使用中執行,在此期間,應用程式不接受訊息或事件,比如說來電話了、鎖屏。通常在這個方法裡實現: 停止 timer 和其他周期性的任務、停止任何正在啟動並執行請求、暫停視頻的播放、如果是遊戲就暫停它、減少OpenGL ES的幀率、颳起任何分發的隊列和不重要的操作隊列(你可以處理網路請求或者其他時間敏感的背景工作).
- (void)appliWillResignActive:(UIApplication *)application
當應用進入活動狀態執行,這個狀態剛好和上面的那個方法相反,需要實現任務的重新開始,比如說重新開始 timer, 繼續分發隊列,提高 OpenGL ES 的幀率.不過遊戲要回到暫停狀態,不能自動開始.
- (void)applicationDidBecamActive:(UIApplication *)appliction
當程式被推送到背景時候調用.所以要設定後台繼續運行,則在這個函數裡面設定即可.在這個方法需要實現:儲存使用者資料或狀態資訊,所有沒有寫到磁碟的檔案或資訊,在進汝後台時,最後都寫到磁碟去,因為程式可能在後台被殺死,釋放儘可能釋放的記憶體
- (void)applicationDidEnterBackground:(UIApplication *)application
當程式從後台將要程式回到前台時調用,這個剛還與上面的那個方法相反.
- (void)applicationWillEnterForeground(UIApplication *)application
當程式將要退出時被調用通常使用來儲存資料和一些退出前的清理工作.這個需要設定 UIApplicationExitsOnSuspend的索引值.
- (void)applicationWillTerminate:(UIApplication *)application
main 函數main 函數是程式啟動的入口,在 iOS app 中, main 函數的功能被最小化,他的主要工作都交給了 UIKit framework.
# import # import PNAppDelegate.hint main(int argc, char * argv[]){ @autoreleasepool{ return UIApplicationMain(argc,argv,nil,NSStringFromClass([PNAppDelegate class])); }}
UIApplicationMain 函數有四個函數,你不需要改變這些參數值,不過我們需要理解這些參數和程式是如何開始的: argc 和 argv 參數包含了系統帶過來的啟動時間.第三個參數確定了主要應用程式類的名稱,這個參數指定為 nil, 這樣 UIKit 就會使用預設的 UIApplication 類建立對象.第四個參數是程式自訂的代理類名,這個類負責系統和代碼之間的互動.它一般在 Xcode 建立項目是會自動產生.
另外 UIApplicationMain 函數載入了程式主介面的檔案.雖然這個函數載入了介面檔案,但是沒有放到應用程式的 windows 上.
重點理解, UIApplicationMain 的做的三件事:
1.根據第三個參數建立 UIApplication 對象.
2.根據第四個參數建立應用程式的 delegate, 並設定 delegate.
3.設定主事件迴圈( main event loop) 包括 application 的 run loop, 同時開始處理事件.