iOS高級開發工程師面試——RunTime

iOS高級開發工程師面試——RunTime

  • 一、簡介
  • 二、介紹下 RunTime 的內存模型(isa、對象、類、metaclass、結構體的存儲信息等)
    • 對象
  • 三、為什么要設計 metaclass ?
  • 四、class_copyIvarList & class_copyPropertyList區別?
  • 五、class_rw_t 和 class_ro_t 的區別?
  • 六、category如何被加載的?兩個 category 的load方法的加載順序?兩個 category 的同名方法的加載順序?
  • 七、category & extension區別?能給 NSObject 添加 Extension 嗎?結果如何?
  • 八、 消息轉發機制,消息轉發機制和其他語言的消息機制優劣對比?
  • 九、在方法調用的時候,方法查詢-> 動態解析-> 消息轉發 之前做了什么 ?
  • 十、IMP、SEL、Method的區別和使用場景
  • 十一、load、initialize方法的區別什么?在繼承關系中他們有什么區別?
  • 十二、說說消息轉發機制的優劣?
  • 十二、iOS你在項目中用過 RunTime 嗎?舉個例子。
  • 十三、RunTime 是如何把 weak變量的自動置 nil 的?
  • 十四、objc中向一個 nil 對象發送消息將會發生什么?

一、簡介

Objective-C 語言是一門動態語言。它把一些決策從編譯階段鏈接階段推遲到運行時階段,實現該機制的基礎就是 runtime(又叫作運行時)。

Runtime 提供的接口基本都是 C 語言,源碼由 C\C++\匯編語言編寫。Runtime API 為 Objective-C 語言的動態屬性提供支持,充當一種用于 Objective-C 語言的操作系統,使得該語言正常運轉工作。

二、介紹下 RunTime 的內存模型(isa、對象、類、metaclass、結構體的存儲信息等)

對象

OC中的對象指向的是一個objc_object指針類型,typedef struct objc_object *id;從它的結構體中可以看出,它包括一個isa指針,指向的是這個對象的類對象,一個對象實例就是通過這個isa找到它自己的Class,而這個Class中存儲的就是這個實例的方法列表屬性列表成員變量列表等相關信息的。

/// Represents an instance of a class.
struct objc_object {Class _Nonnull isa  OBJC_ISA_AVAILABILITY;
};

在OC中的類是用Class來表示的,實際上它指向的是一個objc_class的指針類型,typedef struct objc_class *Class;對應的結構體如下:

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}

從結構體中定義的變量可知,OC的Class類型包括如下數據(即:元數據metadata):super_class(父類類對象)
name(類對象的名稱)
version、info(版本和相關信息)
instance_size(實例內存大小);
ivars(實例變量列表)
methodLists(方法列表)
cache(緩存)
protocols(實現的協議列表);
當然也包括一個isa指針,這說明Class也是一個對象類型,所以我們稱之為類對象,這里的isa指向的是元類對象(metaclass),元類中保存了創建類對象(Class)的類方法的全部信息。

以下圖中可以清楚的了解到OC對象、類、元類之間的關系:
在這里插入圖片描述
從圖中可知:
對象的isa指針指向類對象的isa指針指向元類元類對象的isa指針指向根元類根元類的isa指針指向他本身,從而形成一個閉環。
元類(Meta Class):是一個類對象的類,即:Class的類,這里保存了類方法等相關信息。

我們再看一下類對象中存儲的方法屬性成員變量等信息的結構體:

  • objc_ivar_list
    存儲了類的成員變量,可以通過object_getIvarclass_copyIvarList獲取;另外這兩個方法是用來獲取類的屬性列表的class_getPropertyclass_copyPropertyLi

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/89422.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89422.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89422.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

實現分頁查詢

分頁查詢分頁查詢語句項目中添加分頁功能按鈕設置前后端代碼功能實現分頁查詢語句 限制查詢的 sql 語句: select * from student limit 0,4sql 查詢結果如下: 分頁查詢的每一頁都對應一行 sql 語句,若每一行都寫單獨對應的 sql 語句不僅重復…

[QOI] qoi_desc | qoi_encode | qoi_decode

鏈接:https://phoboslab.org/log/2021/11/qoi-fast-lossless-image-compression (看代碼設計的時候,真的大為震撼,偉大的algorithm T.T) docs:QOI圖像格式 qoi項目提出了Quite OK Image(QOI&am…

智慧城軌可視化:一屏智管全城

圖撲智慧城軌可視化系統,把地鐵線路、車站、列車都搬進三維畫面。列車晚點預警、站臺擁擠提示、設備故障定位…… 這些關鍵信息一屏聚合,調度員能快速調整發車頻次,疏導高峰客流。遇上突發情況,系統聯動應急方案,同步顯…

包新的Git安裝與使用教程(2024九月更新)

目錄 一、安裝git 1.下載git 2.git安裝 3.環境變量配置與測試 二、使用教程 1.創建版本庫 2.版本回退 3.刪除和恢復文件 一、安裝git 1.下載git 官方下載地址:https://git-scm.com/download 然后進入以下頁面,點擊下載鏈接即可(windows一般都是…

中望3D 2026亮點速遞(1)-全新槽功能螺紋功能,減少繁瑣操作

本文為CAD芯智庫整理,未經允許請勿復制、轉載!中望3D 2026全新的槽功能,包括:(1)可快速生成多種槽形;(2)快速生成一個或多個槽;(3)支持…

2025毫米波雷達技術白皮書:智能汽車與物聯網的感知核心

隨著人工智能、物聯網(IoT)和智能汽車產業的迅猛發展,毫米波雷達技術正成為感知領域的核心驅動力。毫米波雷達憑借其高精度、全天候和強抗干擾能力,廣泛應用于智能汽車的自動駕駛、物聯網的環境感知以及工業自動化。2025年&#x…

用 React-Three-Fiber 實現雪花下落與堆積效果:從零開始的 3D 雪景模擬

在 Web3D 開發中,自然現象模擬一直是極具吸引力的主題。本文將基于 React-Three-Fiber(R3F)框架,詳解如何實現一個包含雪花下落、地面堆積的完整雪景效果。我們會從基礎粒子系統入手,逐步完善物理交互邏輯,…

從抓包GitHub Copilot認證請求,認識OAuth 2.0技術

引言 在現代開發工具中,GitHub Copilot 以智能、嵌入式的人工智能代碼補全能力著稱。作為一項涉及用戶敏感數據和付費授權的服務,其認證授權流程尤為值得技術研究。本文基于實際抓包 VS Code 中的 Copilot 登錄認證請求,系統梳理其 OAuth 2.…

Linux操作系統之線程:分頁式存儲管理

目錄 前言: 一、分頁式存儲管理 二、二級頁表的地址轉化 三、缺頁中斷 總結 前言: 我們上篇文章簡單介紹了線程的一些知識點,但是還有很多坑沒有給大家填上,包括頁表部分我們還沒為大家說明。 本篇文章我將會繼續為大家講解…

xss1-8

Level-1<script>alert()</script>基礎反射型 無任何過濾Level-2"> <script>alert()</script> <"閉合屬性&#xff1a;">用來閉合當前標簽的value屬性注入新標簽&#xff1a;閉合屬性后&#xff0c;插入獨立的<script>…

51c嵌入式~單片機~合集1

自己的原文哦~ https://blog.51cto.com/whaosoft/11897656 一、STM32的啟動模式配置與應用 三種BOOT模式 所謂啟動&#xff0c;一般來說就是指我們下好程序后&#xff0c;重啟芯片時&#xff0c;SYSCLK的第4個上升沿&#xff0c;BOOT引腳的值將被鎖存。用戶可以通過設…

Typecho分類導航欄開發指南:從基礎到高級實現

文章目錄 Typecho分類導航欄深度解析:父分類與子分類的完美呈現 引言 一、Typecho分類系統基礎 1.1 Typecho分類結構 1.2 獲取分類數據的基本方法 二、基礎分類導航輸出 2.1 簡單的平鋪式導航 2.2 帶計數器的分類導航 三、層級分類導航實現 3.1 遞歸輸出父子分類 3.2 使用Type…

C++異步編程工具 async promise-future packaged_task等

深入探討 C11 中引入的四個核心異步編程工具&#xff1a;std::async, std::future, std::promise, 和 std::packaged_task。它們共同構成了 C 現代并發編程的基礎。 為了更好地理解&#xff0c;我們可以使用一個餐廳點餐的類比&#xff1a; std::future (取餐憑證)&#xff1…

Linux-網絡管理

網絡管理1. 網絡基礎1.1 TCP/IP 協議棧&#xff08;四層模型&#xff09;1.2 網絡設備配置與基礎概念1.3 網絡接口命名規則1.4 網絡配置文件位置2. 常用網絡配置命令2.1 查看網絡接口信息2.2 配置 IP 地址2.3 啟用/禁用網卡2.4 修改網卡 MAC 地址2.5 配置網卡的 MTU&#xff08…

Linux鎖的概念及線程同步

目錄 1.常見鎖概念 死鎖 死鎖四個必要條件 避免死鎖 避免死鎖算法 2. Linux線程同步 條件變量 同步概念與競態條件 條件變量函數 初始化 銷毀 等待條件滿足 喚醒等待 簡單案例&#xff1a; 條件變量使用規范 1.常見鎖概念 死鎖 死鎖是指在一組進程中的各個進程均占有不會釋放的…

docker更換國內加速器-更換華為加速器2025-717親測可用docker 拉取鏡像出錯

[rootlocalhost ~]# docker pull nginx Using default tag: latest Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)報錯原因就是…

Unity VR多人手術模擬恢復2:客戶端移動同步問題分析與解決方案

Unity VR多人手術模擬恢復2&#xff1a;客戶端移動同步問題分析與解決方案 &#x1f3af; 問題背景 在開發基于Unity Mirror網絡架構的VR多人手術模擬系統時&#xff0c;我們遇到了一個復雜的客戶端移動同步問題&#xff1a; 主要操作者&#xff08;第一個客戶端&#xff09;&a…

uni-app開發的頁面跳轉全局加載中

uni-app開發的頁面跳轉全局加載中首先需要下載插件創建加載中頁面組件app.vue頁面中監聽跳轉首先需要下載插件 https://ext.dcloud.net.cn/plugin?id20613 創建加載中頁面組件 <!-- 全局自定義加載中 --> <template><view v-if"visible" class&qu…

XXE漏洞4-XXE無回顯文件讀取-PentesterLab靶場搭建

一.PentesterLab靶場搭建(實驗環境搭建)介紹&#xff1a;PentesterLab 是一個全面的漏洞演示平臺&#xff0c;但是它是收費的&#xff0c;我們這里只使用它的 xxe 演示案例。安裝 PentesterLab 虛擬機:下載好鏡像&#xff1a; 1.打開VMware新建虛擬機&#xff0c;選擇典型就行。…

【機器學習】圖片分類中增強常用方式詳解以及效果展示

圖片增強常用方式詳解 引言 圖片數據的質量和多樣性對模型的訓練效果起著至關重要的作用。然而&#xff0c;實際獲取的圖片數據往往存在數量不足、分布不均衡等問題。圖片增強技術應運而生&#xff0c;它通過對原始圖片進行一系列變換&#xff0c;生成更多具有多樣性的圖片&…