Objective C物件模型 類物件和元類物件

2021-07-03 19:57:18 字數 787 閱讀 9305

參考:

objective-c物件之類物件和元類物件(一)

objective-c物件模型及應用

參看以上文章基本可以了解objective-c物件模型模型了,

可做學習:

1. 動態替換類方法或例項方法 method swizzling api

2. 編寫category類別

3. 動態增加屬性 objc_setassociatedobject

思考,category類別為什麼能增加方法,而不能直接增加屬性

可變與不可變

因為物件在記憶體中的排布可以看成乙個結構體,該結構體的大小並不能動態變化。所以無法在執行時動態給物件增加成員變數。

相對的,物件的方法定義都儲存在類的可變區域中。objective-c 2.0並未在標頭檔案中將實現暴露出來,但在objective-c 1.0中,我們可以看到方法的定義列表是乙個名為 methodlists的指標的指標(如下圖所示)。通過修改該指標指向的指標的值,就可以實現動態地為某乙個類增加成員方法。這也是category實現的原理。同時也說明了為什麼category只可為物件增加成員方法,卻不能增加成員變數。

需要特別說明一下,通過objc_setassociatedobject 和 objc_getassociatedobject方法可以變相地給物件增加成員變數,但由於實現機制不一樣,所以並不是真正改變了物件的記憶體結構。

除了物件的方法可以動態修改,因為isa本身也只是乙個指標,所以我們也可以在執行時動態地修改isa指標的值,達到替換物件整個行為的目的。不過該應用場景較少。

Objective C類,物件,方法

objective c採用特定的語法對類和例項應用方法 classorinstance method 左方括號後要緊跟類的名稱或者該類的例項名稱,它後面可以是乙個或多個空格,空格後面是將要執行的方法。最後,使用右方括號和分號來終止。請求乙個實力或類執行某個操作時就是在向它發生一條訊息。import ...

1 類與物件之objective c

1.objc跟 c的區別與聯絡 首先objc是乙個物件導向的語言 封裝 繼承 多型 objc相當於c的乙個超集即objc允許使用任何c語言 但增加了許多c沒有的特點bigger easier 2.objc中的類與物件 類由介面 xx.h inte ce 和實現 xx.m implementation...

1 類與物件之objective c

1.objc跟c的區別與聯絡 首先objc是乙個物件導向的語言 封裝 繼承 多型 objc相當於c的乙個超集即objc允許使用任何c語言 但增加了許多c沒有的特點bigger easier 2.objc中的類與物件 類由介面 xx.h inte ce 和實現 xx.m implementation ...