在從繼承目標-C的所有類objc_class,其具有superClass,cache_t并class_data_bits包含所有的方法,屬性和協議。
一個實體物件superClass在它的類物件中存盤它的、方法、屬性和prototools 資訊,而類物件將它的資訊存盤在元類的class_data_bits.
那么,既然所有的類資訊都存盤在它的類物件中,那么實體物件除了 isa 指標之外還存盤什么?
uj5u.com熱心網友回復:
物件的資料。
ObjC 物件被布置為標題,然后是實體變數(首先是根類,然后是每個子類到物件的直接實體變數)。您不會直接在objc_object. 但你會看到它_class_createInstancesFromZone:
size_t size = cls->instanceSize(extraBytes);
num_allocated =
malloc_zone_batch_malloc((malloc_zone_t *)(zone ? zone : malloc_default_zone()),
size, (void**)results, num_requested);
請注意對 的呼叫cls->instanceSize(extraBytes)。這是實體的完整大小,包括它的變數(加上“額外”)。它分配的不僅僅是一個 isa 指標。Ivar 表具有該額外分配的偏移量。
“額外”并不經常使用,但它允許您為任何您喜歡的目的分配額外的記憶體。例如, NSString 為其資料分配額外的行內存盤,而不是創建額外的指標間接。(我認為它仍然這樣做;它曾經這樣做過,但我已經有一段時間沒有檢查代碼了。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/347488.html
標籤:目标-c
