一缠沈、Runtime
- Objective-C是一門動(dòng)態(tài)性比較強(qiáng)的編程語言,跟C稚疹、C++等語言有著很大的不同
- Objective-C的動(dòng)態(tài)性是由Runtime API來支撐的
- Runtime API提供的接口基本都是C語言的,源碼由C\C++\匯編語言編寫
二捌木、isa詳解
- 要想學(xué)習(xí)Runtime薇溃,首先要了解它底層的一些常用數(shù)據(jù)結(jié)構(gòu)章喉,比如isa指針
- 在arm64架構(gòu)之前,isa就是一個(gè)普通的指針伴郁,存儲(chǔ)著Class耿战、Meta_Class對象的內(nèi)存地址
- 從arm64架構(gòu)開始,對isa進(jìn)行了優(yōu)化焊傅,變成了一個(gè)共用體(
union
)結(jié)構(gòu)剂陡,還使用位域來存儲(chǔ)更多的信息
三、objc_msgSend執(zhí)行流程
- OC中的方法調(diào)用其實(shí)都是轉(zhuǎn)換為objc_msgSend函數(shù)調(diào)用
- objc_msgSend的執(zhí)行流程可以分為3大階段
-
消息發(fā)送
-
動(dòng)態(tài)方法解析
-
消息轉(zhuǎn)發(fā)
-
四狐胎、@dynamic
- 提示編譯器不要自動(dòng)生成setter和getter的實(shí)現(xiàn)鸭栖,不要自動(dòng)生成成員變量
五、super
[super class]
[super superclass]
注:面試題
- 講一下OC的消息機(jī)制
- 消息轉(zhuǎn)發(fā)機(jī)制流程
- 什么是Runtime握巢?平時(shí)項(xiàng)目中有用過嗎