IOS 學習日誌 2015-3-17,ios2015-3-17
Objective--C 一 關鍵字@class 匯入已有的類id 物件類型 表示任何一個ObjC物件類型Block 物件類型 OC中稱為代碼塊 類似於C中的函數式指標 typedef 定義資料類型 @Category 分類,擴充二 函數三 規則 1 id A id可以表示任何一個ObjC物件類型,類型後面的”<協議名>“用於約束作為這個屬性的對象必須實現該協議(注意:使用id定義的物件類型不需要加“*”);2 @class A 在.h檔案中如果使用了另一個檔案的類或協議我們可以通過@class或者@protocol進行聲明,而不必匯入這個檔案,這樣可以提高編譯效率3 Block A Block類型定義:傳回值類型(^ 變數名)(參數列表)(注意Block也是一種類型);B 感覺類似於匿名函數C 變數名在類定義時可以不用帶*D Block的typedef定義:傳回值類型(^類型名稱)(參數列表);E Block的實現:^(參數列表){操作主體};F Block中可以讀取塊外面定義的變數但是不能修改,如果要修改那麼這個變數必須聲明_block修飾;3 CategoryA 擴充現有的類並且不需要改動原類B 建立一個Objective-C 檔案,選擇類的類型為Category,還有要選擇你要修改的類,注意看建立後的檔案名稱,它是由原類名+新類名一起組成的,必須要會有那個加號符, 例如 NSString 擴充後的檔案名稱為 NSString+Trim ,再看類的定義上需要改動,原來定義一個普通的類是 @interface 類名:NSObject,擴充後就是 @interface 類名(副檔名) 例如 @interface NSString(Trim)C 適用範圍 I 系統或架構中的類II 類包含了很多個方法實現,而這些方法需要不同團隊的成員來實現III 類包含了很多個方法實現,而這些方法需要不同團隊的成員來實現D 需要注意的問題I Category可以訪問原始類的執行個體變數,但不能添加執行個體變數,如果想添加變數,那就通過繼承建立子類來實現。II Category可以重載原始類的方法,不大不推薦這麼做,這樣會覆蓋掉原始類的方法。如果確實要重載,那就通過繼承建立子類來實現。III和普通介面有所區別的是,在Category的實現檔案中的執行個體方法只要你不去調用它你可以不用實現所有聲明的所有方法。