<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          OCEvalObjective-C 解釋器

          聯(lián)合創(chuàng)作 · 2023-09-30 20:14

          目前流行的 JSPatch/RN 基于JavaScriptCore提供了iOS的熱修復和動態(tài)化方案。但是都必須通過下發(fā)Javascript腳本來調(diào)用Objective-C。 尤其是JSPatch,編寫大量的JS代碼來調(diào)用OC的方法,開發(fā)效率較低(目前可以借助語法轉(zhuǎn)換器),運行效率也會打折扣。 更好的方案是直接編寫Objective-C代碼,來實現(xiàn)熱修復或者動態(tài)化方案。開發(fā)效率更高,代碼的執(zhí)行效率也更高。

          在python和javascript等腳本語言里,有類似eval()函數(shù)來直接動態(tài)執(zhí)行代碼。所以我實現(xiàn)了OCEval 這個庫,讓我們能直接動態(tài)執(zhí)行Objective-C代碼。例子如下:

          NSString *inputStr = @"return 1 + 3 <= 4 && [NSString string] != nil;";
          NSNumber *result = [OCEval eval:inputStr]; // result: @(YES)

          為了實現(xiàn)跟JSPatch類似的熱修復功能,增加了方法替換。我們就可以通過下發(fā)Objective-C代碼進行現(xiàn)有App的方法替換,來進行熱修復的功能。

          //在新的imp里直接調(diào)用舊的方法實現(xiàn)
          NSString *viewDidLoad2 = @"{\
          [originalInvocation invoke];\
          ";
          
          [OCEval hookClass:@"ViewController"
                   selector:@"viewDidLoad"
                   argNames:@[]
                    isClass:NO
             implementation:viewDidLoad2];

          OCEval甚至可以用來完整的編寫一個頁面或者App,并動態(tài)下發(fā)。我在iOS的Demo里實現(xiàn)了一個簡單的頁面,具體見源碼。

          瀏覽 20
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99精产18在线观看 | 国内亚洲欧美精品九九九久久免费 | 欧美日高清视频免费在线播放 | 激情一区 | 影音先锋色成人 |