復(fù)習(xí)總結(jié)2 切面編程 & 二進(jìn)制優(yōu)化

Aspect切面編程

定義

切面編程
以通過(guò)預(yù)編譯方式和運(yùn)行期動(dòng)態(tài)代理實(shí)現(xiàn)在不修改源代碼的情況下給程序動(dòng)態(tài)統(tǒng)一添加功能的一種技術(shù)。

Aspects簡(jiǎn)介:

Aspects github地址:https://github.com/steipete/Aspects.git

Aspect是一個(gè)基于metho swizzing的iOS函數(shù)替換的第三方庫(kù),他可以很好的實(shí)現(xiàn)勾取一個(gè)類或者一個(gè)對(duì)象的某個(gè)方法

#pragma mark - Public Aspects API
+ (id<AspectToken>)aspect_hookSelector:(SEL)selector
                      withOptions:(AspectOptions)options
                       usingBlock:(id)block
                            error:(NSError **)error {
    return aspect_add((id)self, selector, options, block, error);
}  //鉤一個(gè)類所有實(shí)例方法中的某一個(gè)方法

- (id<AspectToken>)aspect_hookSelector:(SEL)selector
                      withOptions:(AspectOptions)options
                       usingBlock:(id)block
                            error:(NSError **)error {
    return aspect_add(self, selector, options, block, error);
} //鉤取一個(gè)實(shí)例對(duì)象的某一個(gè)方法

實(shí)現(xiàn)原理

基于消息轉(zhuǎn)發(fā)

Aspects主要是利用了forwardInvocation進(jìn)行轉(zhuǎn)發(fā),Aspects利用和kvo類似的原理,通過(guò)動(dòng)態(tài)創(chuàng)建子類的方式,把對(duì)應(yīng)的對(duì)象isa指針指向創(chuàng)建的子類,然后把子類的forwardInvocationIMP替成__ASPECTS_ARE_BEING_CALLED__

注意

處理調(diào)用邏輯, 有before, instead, after, remove四種option插入狀態(tài)。
將block轉(zhuǎn)換成一個(gè)NSInvocation對(duì)象以供調(diào)用。

二進(jìn)制優(yōu)化

原理

image.png

利用iOS系統(tǒng)物理內(nèi)存與虛擬內(nèi)存映射的機(jī)制,把所有啟動(dòng)時(shí)候的代碼都放在一頁(yè)或者兩頁(yè),這樣就很大程度上優(yōu)化啟動(dòng)速度即二進(jìn)制重拍。

實(shí)現(xiàn)
1.Instruments調(diào)試工具 -> System Trace
調(diào)試工具,測(cè)試啟動(dòng)時(shí)間

2.BuildSetting -> Write Link Map File -> yes
打開(kāi)項(xiàng)目的符號(hào)順序輸出開(kāi)關(guān)

3.通過(guò)Clang獲取APP啟動(dòng)時(shí)候調(diào)用的所有方法
Other C Flags 在里面添加相關(guān)參數(shù),第一個(gè)啟動(dòng)頁(yè)面里加入相應(yīng)庫(kù)函數(shù)和代碼段

4.Build setting -> Order File
加載符號(hào)加載順序文件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容