OC 動態類型,動態綁定,動態加載


Objective-C具有相當多的動態特性,基本的,也是經常被提到和用到的有

  • 動態類型(Dynamic typing)
  • 動態綁定(Dynamic binding)
  • 動態加載(Dynamic loading)

動態類型:程序直到執行時才能確定所屬的類。

id 數據類型
id 通用的對象類型,可以存儲任意類型的對象,id后面沒有號,它本身就是個指針
類似於void 
,但只可以指向對象類型

靜態類型與動態類型

  1. 編譯期檢查與運行時檢查
  2. 靜態類型在編譯期就能檢查出錯誤
  3. 靜態類型聲明代碼可讀性好
  4. 動態類型只有在運行時才能發現錯誤

動態綁定:程序直到執行時才能確定實際要調用的方法。

動態綁定所做的,即是在實例所屬類確定后,將某些屬性和相應的方法綁定到實例上。

BOOL類型

bool是C語言的布爾類型,有true和false,BOOL是Objective C 語言的布爾類型,有YES和NO,因為OC可以跟C混編,所以bool和BOOL可以同時出現在代碼中

BOOL深入解析:
typedef signed char BOOL;
BOOL類型有兩個值YES,NO。YES=1,NO=0。

說明:objective-c 中的BOOL實際上是一種對帶符號的字符類型(signed char)的類型定義(typedef),它使用8位的存儲空間。通過#define指令把YES定義為1,NO定義為0。

    Class類:表示一個類名,class被創建后,我們可以把class來當成對象的類。 Class cla1 = [類名 class] Class cla2 = [對象 class] Class cla3 = NSClassFromString(@"類名");
    SEL 類成員方法的指針 可以理解 @selector()就是取類方法的編號,他的行為基本可以等同C語言的中函數指針,只不過C語言中,可以把函數名直接賦給一個函數指針,而Object-C的類不能直接應用函數指針,這樣只能做一個@selector語法來取. 它的結果是一個SEL類型。這個類型本質是類方法的編號(函數地址) 1>類里面的方法都是被轉換成SEL變量進行存儲的。 2>放類聲明一個對象,對象調用方法的時候,系統會被這個方法轉換成SEL,然后拿這個SEL到類方法中去匹配。 3>我們可以自己手動把方法轉換成SEL,然后用這個SEL去查找方法(performSelector)。
    -isMemberOfClass: 判斷是否是這個類的實例 -isKindOfClass: 判斷是否是這個類或者這個類的子類的實例 -respondsToSelector: 判讀實例是否有這樣方法 +instancesRespondToSelector: 判斷類是否有這個方法。此方法是類方法。

動態加載:根據需求加載所需要的資源

這點很容易理解,對於iOS開發來說,基本就是根據不同的機型做適配。最經典的例子就是在Retina設備上加載@2x的圖片,而在老一些的普通屏設備上加載原圖。隨着Retina iPad的推出,和之后可能的Retina Mac的出現,這個特性相信會被越來越多地使用。

贈品

多態的出現時為了讓不同的類能使用同名的方法。這個讓程序的可讀性大大提高,也降低了編程難度。

動態類型與動態綁定是為了解決隨多態的便利而引起的弊端,有了動態類型與動態綁定,不用去考慮輸出中的方法是哪個類型的方法,會自動判定。

而id類型的出現就是為了更好的承接動態類型與動態方法出來的返回值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM