OCEvalObjective-C 解释器
目前流行的 JSPatch/RN 基于JavaScriptCore提供了iOS的热修复和动态化方案。但是都必须通过下发Javascript脚本来调用Objective-C。 尤其是JSPatch,编写大量的JS代码来调用OC的方法,开发效率较低(目前可以借助语法转换器),运行效率也会打折扣。 更好的方案是直接编写Objective-C代码,来实现热修复或者动态化方案。开发效率更高,代码的执行效率也更高。
在python和javascript等脚本语言里,有类似eval()函数来直接动态执行代码。所以我实现了OCEval 这个库,让我们能直接动态执行Objective-C代码。例子如下:
NSString *inputStr = @"return 1 + 3 <= 4 && [NSString string] != nil;"; NSNumber *result = [OCEval eval:inputStr]; // result: @(YES)
为了实现跟JSPatch类似的热修复功能,增加了方法替换。我们就可以通过下发Objective-C代码进行现有App的方法替换,来进行热修复的功能。
//在新的imp里直接调用旧的方法实现 NSString *viewDidLoad2 = @"{\ [originalInvocation invoke];\ "; [OCEval hookClass:@"ViewController" selector:@"viewDidLoad" argNames:@[] isClass:NO implementation:viewDidLoad2];
OCEval甚至可以用来完整的编写一个页面或者App,并动态下发。我在iOS的Demo里实现了一个简单的页面,具体见源码。
评论
CintC++解释器
Cint(C/C++ interpreter, C-int)是一个C++解释器,顾名思义,和GCC、VC等编译器不同,它是解释执行C++代码的。我们可以利用它来让我们的程序支持解释C++语言。它具有的
CintC++解释器
0
DMDScriptJavaScript 解释器
DMDScript是由DigitalMars公司的开发的JavaScript解释器。它装设了ECMA-262使它可与微软的JScript相抗衡。DMDScript使用D语言实现,也提供了C++的版本。
DMDScriptJavaScript 解释器
0
NuitkaPython 解释器
Nuitka是一个Python的替代编译器。它可以无缝地替代和扩展Python的解释和编译工作。现在支持CPython2.6、2..7、3.2、3.3和3.4版本。它可以执行编译的代码,并能用很兼容的
NuitkaPython 解释器
0