讀書筆記-基礎,讀書筆記基礎
1、iOS的系統架構分為4層——Cocoa Touch層、Media層、Core Services層和Core OS層。
2、自動布局(Auto Layout)最先應用於Mac 0S X 10.7的開發,它為視圖布局定義一套約束,而約束定義了兩個介面中視圖之間的關係。
3、AppDelegate是應用程式委派物件,繼承了UIResponder類,並實現了UIApplicationDelegate委託協議。前者使子類AppDelegate具有處理相應時間的能力,而後者委託協議使其能夠成為應用程式委派物件,這種對象能夠響應應用程式的生命週期。相應的,AppDelegate的子類也能夠實現這兩個功能。
4、ViewController類繼承自UIViewController類,它是視圖控制器類,在工程中扮演著根視圖和使用者事件控制類的角色。
5、nib等同於xib。一般而言,一個工程中可以有多個xib檔案,一個xib檔案對應著一個視圖控制器和多個視圖,而使用故事版時,一個工程只需要一個故事板檔案就可以了。故事板還可以描述介面之間的導航關係。 事實上,故事板是多個xib檔案集合的描述檔案,也採用xml格式。
6、應用的生命週期:作為應用程式的委派物件,AppDelegate類在應用生命週期的不同階段會回調不同的方法。
下面簡要介紹下iOS應用的的5種狀態。
Not Running(非運行狀態)。應用沒有運行或被系統終止。
Inactive(前台非使用中)。應用正在進入前台狀態,但是還不能接受事件處理。
Active(前台活動狀態)。應用進入前台狀態,能接受事件處理。
Background(後台狀態)。應用進入後台後,依然能夠執行代碼。如果有可執行檔代碼就會執行代碼,如果沒有可執行檔代碼或者將可執行檔代碼執行完畢,應用會馬上進入掛起狀態。
Suspended(掛起狀態)。處於掛起的應用進入一種“冷凍“狀態,不能執行代碼。如果系統記憶體不夠,應用會被終止。
在應用狀態躍遷的過程中,iOS系統會回調AppDelegate中的一些方法,並且發送一些相應的通知:
application:didFinishLaunchingWithOptions:應用啟動並進行初始化時會調用該方法並發出通知,這個階段會執行個體化根視圖控制器。
applicationDidBecomeActive:應用進入前台並處於活動狀態時調用該方法並發出通知。這個階段可以恢複UI的狀態。
applicationWillResignActive:應用從活動狀態進入到非使用中時調用該方法並發出通知。這個階段可以儲存UI的狀態。
applicationDidEnterBackground:應用進入後台時調用該方法並發出通知。這個階段可以儲存使用者資料,釋放一些資源(例如資料庫資源等)
applicationWillEnterForeground:應用進入到前台,但是還沒有處於活動狀態時調用該方法並發出通知。這個階段可以恢複使用者資料。
applicationWillTerminate:應用被終止時調用該方法並發出通知,但記憶體清除時除外。這個階段釋放一些資源,也可以儲存使用者資料。
下面我們以幾個應用情境為切入(具體分析就不寫了,相信大家肯定也都能理解):
應用啟動情境:Not running→Inactive→Active
應用退出情境:該情境的狀態躍遷過程可以分為兩種情況,可以在後台運行或掛起和不可以。根據產品屬性檔案中的相關屬性Application does not run in background可以控制這兩種這兩種狀態。
(1)應用可以在後台運行或掛起:Active → Inactive → Background→Suspended
(2)應用不可以在後台運行或掛起:Active → Inactive → Background→Suspended→Not running
掛起重新運行情境:Suspended → Background → Inactive → Active
記憶體清除-應用終止情境: Background→Suspended→Not running
7、視圖生命週期
在視圖不同的生命週期中,視圖控制器會回調不同的方法。
在視圖控制器已被執行個體化,視圖被載入到記憶體中時調用viewDidLoad方法,這個時候視圖並未出現。在該方法中,通常進行的是對所控制的視圖進行初始化處理。
視圖可見前後會調用viewWillAppear:方法和viewDidAppear:方法。視圖不可見前後會調用viewWiiDisappear:和viewDidDisappear:方法。4個方法調用父類相應的方法以實現其功能,編碼時該方法的位置可根據情況做以調整,如下:
1 -(void)viewWillAppear:(BOOL)animated 2 { 3 [super viewWillAppear:YES];