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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

iOS runtime再学习

發布時間:2023/12/8 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS runtime再学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

iOS面試專題一
幾乎是默寫出來,加上自己理解的博客(iOS面試)

持續更新中。。。

問題:當方法轉發到另一個類的對象的時候,另一個類沒有對應的屬性怎么辦,會崩潰嗎?

文章目錄

  • 1.基礎數據結構
  • 2.對象,類對象,元類對象
  • 3.消息傳遞,方法查找
  • 4.消息轉發,動態方法解析
  • 5.runtime的使用

  • 運行時runtime
  • 編譯:將高級語言翻譯成計算機能聽懂的二進制語言
  • 運行:計算機開始執行這些二進制語言所記錄的內容

oc是一門動態語言,它將盡可能多的決策從編譯時和鏈接時推遲到運行時。這意味著它不僅需要一個編譯器,還需要一個運行時系統來執行編譯后的代碼,也就是runtime

Messaging(消息機制):消息傳遞,方法查找

  • 消息(方法聲明)直到運行時才綁定到方法實現。編譯器將消息表達式轉換為對消息傳遞函數objc_msgSend的調用。這個函數接收消息中提到的接收方和方法的名稱(方法選擇器)作為它的兩個主要參數,消息中傳遞的任何參數也會傳遞給objc_msgSend

消息傳遞函數objc_msgSend完成動態綁定所需的一切

  • 找到IMP --> 調用IMP --> 返回返回值
  • 一個類分派表。這個表中有一些條目,它們將方法選擇器與它們所標識的方法的特定于類的地址相關聯

消息轉發,動態方法解析

  • resoleveInstanceMethode
  • forwardingTargetForSelector
  • methodSignatureForSelector, forwardInvacation

runtime使得閉源的iOS變為開源,獲取系統類的私有屬性,方法和成員變量。用kvc賦值,用runtime調用方法

  • oc的方法調用,實際上就是給對象發消息
  • 在運行時選擇方法的實現 – 方法(IMP)被動態地綁定到消息(SEL)

1.基礎數據結構

  • cache_t
  • bucket_t:key(SEL),IMP
  • 用于快速查找方法執行函數
  • 是可增量擴展的哈希表結構
  • 是局部性原理的最佳應用
  • class_rw_t - methods: 二維數組,一個類可能有多個分類。 readwrite
  • class-ro_t - methods: 一維數組,readonly
  • isa指針 指針型:isa的值代表Class的地址。 非指針型:isa的值的部分代表Class的地址
  • method_t 函數四要素:名稱(SEL),參數,返回值,函數體(IMP)
  • Type Encodings V-void @-id : - SEL

2.對象,類對象,元類對象

  • 類對象存儲實例方法列表等信息
  • 元類對象存儲類方法列表等信息
  • 根元類對象的父類是根類,所有NSObject類對象可以調用實例對象的方法

3.消息傳遞,方法查找

  • objc_msgSend(id self, SEL _cmd), 消息傳遞轉化為了函數調用
  • [super class]:objc_msgSendSuper(super,@selector(class)), 從父類的方法列表開始尋找,返回的還是self的類對象,是向self發消息
  • 消息的傳遞過程(機制)

4.消息轉發,動態方法解析

  • 動態方法解析(Dynamic Method Resolution)
  • resolveInstanceMethod:動態添加方法的實現
  • 消息轉發(Message Forwarding):轉發到其他對象的同名方法
  • forwardingTargetForSelector(Fast forwarding):轉發給別的對象去實現
  • Normal forwarding:可以轉發到本對象的其他方法,也可以轉發到其他的對象的其他方法
  • methodSignatureForSelector: 方法簽名
  • forwardInvocation: 方法實現(調用)

  • Method-Swizzling

5.runtime的使用

  • 可以使得閉源的iOS變為開源,獲取系統類的私有屬性,方法和成員變量。用kvc賦值

iOS runtime 動態攔截方法,設置參數 tableView改變索引欄的字體大小和顏色

總結

以上是生活随笔為你收集整理的iOS runtime再学习的全部內容,希望文章能夠幫你解決所遇到的問題。

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