OC的記憶體布局

2021-06-15 03:47:31 字數 1047 閱讀 8239

**:

在 /usr/include/objc/objc.h 有定義

struct objc_class

;typedef struct objc_class *class;

class是乙個objc_class結構體的指標

typedef struct objc_object  *id;
很明顯, 乙個物件的第1個元素, 是類指標isa

以programing in objective-c的 fraction來分析

@inte***ce fraction: nsobject

很明顯可以看到 frac  物件(0x6c6c890) 的第1個元素是  isa, 表明 0x361c 處存著  這個物件的 類物件(class object)

第2個元素, 就是  numberator, 值為1

第3個元素, 就是  deminator, 值為3

可以看到

0x361c 就是 類物件(class object),  並且是fraction 的類物件

0x361c 的父類 是  0x1558f4c (它就是 nsobject)

0x1558f4c(nsobject)就是root class,   它父類是nil(0×0)

它的meta class 就是 root meta class, 也就是nsobject meta class, 位於0x1558f60

而0×3608 就是  fraction meta class

任何meta class的isa都指向  root meta class,   顯然, 3608的isa指向 0x1558f60, 正是 nsobject  meta class

nsobject是fraction的父類, 相應的nsobject meta class是 fraction meta class的父類,  所以看到3608的superclass指向0x1558f60, 正是nsobject meta class

最讓我不能理解的是 root meta class的父類, 居然是  root class

OC 相對布局

頁面裡乙個uitableview,然後uitableview下面有乙個button,想要實現的效果,當uitableview的高度改變時,保證button和uitableview的豎直間距不變。實現 給uitableview設定高度約束,給乙個預設的高度值160 因為這裡初始化顯示4個cell,每個...

oc的記憶體管理

記憶體管理在oc中是非常重要的,如果乙個專案記憶體沒有管理好,那麼整個專案已經是沒有用了。所以記憶體管理是非常重要的。那麼為什麼要進行記憶體管理呢?由於移動裝置的記憶體極其有限,所以每個 所佔的記憶體也是有限制的,當 所占用的記憶體較多時,系統就會發出記憶體警告,這時需要 一些不需要再繼續使用的記憶...

OC的記憶體管理

程式在執行的過程中通常通過以下行為,來增加程式的的記憶體占用。每個軟體所能占用的記憶體也是有限的當程式所占用的記憶體較多時,系統就會發出記憶體警告,這時就得 一些不需要再使用的記憶體空間。比如 一些不需要使用的物件 變數等如果程式占用記憶體過大,系統可能會強制關閉程式,造成程式崩潰 閃退現象,影響使...