OC中物件的動態編譯機制

2021-07-04 10:44:45 字數 653 閱讀 7116

[物件的編譯機制]

1、為什麼oc不能sizeof乙個物件的大小?和類結構相近的結構體卻可以

2、為什麼oc不能將物件宣告到靜態空間,如棧中,和類相近的結構題卻可以

因為ic的動態繼承編譯機制,動態繼承機制,就是說在編譯的時候不能確定父類的大小,只有在執行時才能確定父類大小,

答1:sizeo是在棧中操作的,編譯的時候就會計算出來sizeof的值

而棧中不知道物件的父類大小,所以不能使使用sizeof計算出物件的大小

答2:棧是在編譯完成後產生的,編譯的結果是二進位制機器檔案,即彙編棧已經產生,所以棧內不能放類的物件,因為產生棧的時候不知道父類的大小

棧是由彙編**指令描述的

為什麼結構體可以直接寄計算sizeof,也能直接宣告到靜態空間呢?

為什麼結構體不管定義在棧中或堆中都能直接sizeof?因為定義到堆中的時候已經知道了結構體的大小,因為結構體對於呼叫它的**產生的棧而言是暴露的。

是因為結構體定義的標頭檔案直接把結構體的屬性暴露給了棧,所以可以直接宣告到靜態空間

總之一句話,父類的詳細情況對於呼叫其子類的棧來說是封閉的,而結構體相對於呼叫它的棧來說是暴露的。

oc中的動態繼承編譯機制是在編譯的時候不把父類詳細情況暴露給呼叫子類的棧,而是在執行的時候才把父類的詳細情況暴露給調

用子類的棧

OC物件中擁有物件

3.設計3個類,類之間的關係自擬 比如繼承 組合 1 人 1 屬性 姓名 年齡 2 方法 屬性相應的 set和 get方法 設計乙個物件方法同時設定姓名和年齡 2 書 1 屬性 書名 出版社名稱 作者 包含姓名和年齡 2 方法 屬性相應的 set和 get方法 3 學生 姓名 年齡 學號 書 隨身帶...

OC 的 Runtime 動態獲取物件屬性

執行時是 oc 的核心,其特點就是程式在執行的時候,以傳送訊息的形式呼叫方法.在實際開發中,關於執行時方面的運用點,其實並不多,最常用的也無非是動態獲取物件的屬性.示例 1.新建乙個繼承自nsobject 的物件,在.h 檔案宣告2個屬性 import inte ceperson nsobject ...

OC 的反射機制

class 的反射 通過類名的字串形式例項化物件 class class nsclassfromstring student student stu class alloc init 將類名變成字串 class class student class string classname nsstrin...