日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一个Objective-C对象如何进行内存布局?(考虑有父类的情况)

發布時間:2025/3/14 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一个Objective-C对象如何进行内存布局?(考虑有父类的情况) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

?

1.對象isa指向類對象,類對象的isa指向元類。元類isa指向根元類。根元類的isa指針指向自己,superclass指針指向NSObject類

2.實例對象結構體只有一個isa變量,指向實例對象所屬的類。類對象有isa,superclass,方法,屬性,協議列表,以及成員變量的描述。

3.所有的對象調用方法都是一樣的,沒有必要存在對象中,對象可以有無數個,類對象就有一個所以只需存放在類對象中

? ??

?

可以從官方objc.h源碼里面找到實例定義

? ??/// Represents an instance of a class.

? ? struct objc_object {

? ? ? ? Class _Nonnull isa? OBJC_ISA_AVAILABILITY;

? ? };


可以在runtime.h里面找到類對象的定義

? ??

? ? struct objc_class {

? ? ? ? Class _Nonnull isa? OBJC_ISA_AVAILABILITY;

?? ? ? ?

#if !__OBJC2__

? ? ? ? //向該類所繼承的父類對象

? ? ? ? Class _Nullable super_class? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OBJC2_UNAVAILABLE;

? ? ? ? const char * _Nonnull name ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OBJC2_UNAVAILABLE;

? ? ? ? long version ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OBJC2_UNAVAILABLE;

? ? ? ? long info? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OBJC2_UNAVAILABLE;

? ? ? ? long instance_size ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OBJC2_UNAVAILABLE;

? ? ? ? //成員變量列表

? ? ? ? struct objc_ivar_list * _Nullable ivars? ? ? ? ? ? ? ? ? OBJC2_UNAVAILABLE;

? ? ? ? //方法列表

? ? ? ? struct objc_method_list * _Nullable * _Nullable methodLists? ? ? ? ? ? ? ? ? ? OBJC2_UNAVAILABLE;//方法列表

? ? ? ? //用于緩存調用過的方法

? ? ? ? struct objc_cache * _Nonnull cache ? ? ? ? ? ? ? ? ? ? ? OBJC2_UNAVAILABLE;

? ? ? ? //協議鏈表用來存儲聲明遵守的正式協議

? ? ? ? struct objc_protocol_list * _Nullable protocols? ? ? ? ? OBJC2_UNAVAILABLE;

#endif

?? ? ? ?

? ? }

?

?

轉載于:https://www.cnblogs.com/huangzs/p/7574180.html

總結

以上是生活随笔為你收集整理的一个Objective-C对象如何进行内存布局?(考虑有父类的情况)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。