oc編程思想

面向對象概念

面向對象編程(Object Oriented Programming,OOP,面向對象程序設計)是一種計算是一種計算機編程范式, 它將對象作為問題空間的基本元素, 利用對象和對象之間的相互作用來設計程序.

對象的概念

面向對象思想把整個世界看成由各種對象來組成的. 這些對象具有屬性和行為, OC中稱之為屬性和方法. 從最簡單的整數到復雜的飛機等均可看作對象, 它不僅能表示具體的事物, 還能表示抽象的規則, 計劃或事件.

類的概念

面向對象思想的中, 具體的事物是對象, 具有相同或相似性質的對象的抽象或者說描述就是類. 因此, 對象的抽象是類, 類的具體化就是對象, 也可以說類的實例是對象.

元類的概念

對象的抽象是類, 類的抽象又是什么呢?

前文提到OC是在C的基礎上, 賦予了面向對象的能力. OC和其他的面向對象語言有一點區別, 它有元類的概念. OC中的’類’, 它的抽象叫做元類(meta class). 我們可以認為元類的具體化的對象就是類.
元類的結構定義如下:

struct objc_class {
    Class isa;
    Class super_class;
    const char *name;
    long version;
    long info;
    long instance_size;
    struct objc_ivar_list *ivars;
    struct objc_method_list **methodLists;
    struct objc_cache *cache;
    struct objc_protocol_list *protocols;

} OBJC2_UNAVAILABLE;

類也有自己的屬性: 比如, name是類的名字, 這里是IPhone6. 對象的屬性則是在ivars里, 這里姑且先讓我用屬性來稱呼. methodLists是類的方法列表, 就手機的類的來說, 他的methodLists里就有call這個方法.

類也是一個具體的對象, 正因為OC是這樣實現OOP的, 我們可以修改這個對象的屬性的值, 從而實現一些特殊的用途.

我們可以動態的添加一個方法.

比如最早用功能機的時候是不可以安裝app的, 我用的iPhone6是智能手機, 可以給他安裝一個APP, 這樣就可以干一些原本不能干的事情.
還可以通過swizzle技術交換2個方法的實現. 從而做出AOP編程.

類與對象的實質,參考文檔:
http://southpeak.github.io/2014/10/25/objective-c-runtime-1/
http://www.lxweimin.com/p/001b296688ec
https://juejin.im/entry/587d887f1b69e60058486a71

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 轉至元數據結尾創建: 董瀟偉,最新修改于: 十二月 23, 2016 轉至元數據起始第一章:isa和Class一....
    40c0490e5268閱讀 1,776評論 0 9
  • 序言 “佛曰:苦海無涯,回頭是岸。——佛教用語” 面向對象(Object-Oriented),這是一條令無數開發人...
    葉小健閱讀 2,449評論 4 24
  • 國家電網公司企業標準(Q/GDW)- 面向對象的用電信息數據交換協議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,178評論 6 13
  • 背景:大三下 實習面試 坐標上海 Java研發 其實接觸Java滿打滿算也就一年不到,因為最近經常在用,就想試一下...
    郗南楓閱讀 2,073評論 3 8