除了上面的代码,在ViewController.m文件中没有编写任何其他的方法,运行工程,可以看到程序并没有崩溃,ViewController执行了creatView方法。
通过上面的示例,我们发现使用JSPatch可以做一些十分有趣的事。对于iOS应用来说,通过官方渠道AppStore进行应用程序的发布要通过人工审核,有时这个审核周期会非常长,如果在开发者在编写代码时留下了一些小漏洞,应用一旦上线,若要修改掉这个bug就十分艰难了。有了JSPatch,我们可以想象,如果可以定位到线上应用有问题的方法,使用JS文件来修改掉这个方法,这将是多么cool的一件事,事实上,JSPatch的主要用途也是可以实现线上应用极小问题的hotfix。
三、JavaScript与Objective-C交互的基础方法
要使用JSPatch来进行Objective-C风格的方法编写,需要遵守一些JavaScript与Objective-C交互的规则。
1.在JavaScript文件中使用Objective-C类
在编写JavaScript代码时如果需要用到Objective-C的类,必须先对这个类进行require引用,例如,如果需要使用UIView这个类,需要在使用前进行如下引用:
require('UIView')
同样也可以一次对多个Objective-C类进行引用:
require('UIView, UIColor, UILabel')
还有一种更加简便的写法,直接在使用的时候对其进行引用:
require('UIView').alloc().init()
2.在JavaScript文件中进行Objective-C方法的调用
在进行Objective-C方法的调用时,分为两种,一种是调用类方法,一种是调用类的对象方法。
调用类方法:通过类名打点的方式来调用类方法,格式类似如下,括号内为参数传递:
UIColor.redColor()
调用实例方法:通过对象打点的方式调用类的实例方法,格式如下,括号内为参数传递:
view.addSubview(label)
对于Objective-C中的多参数方法,转化为JavaScript将参数分割的位置以_进行分割,参数全部放入后面的括号中,以逗号分割,示例如下:
view.setBackgroundColor(UIColor.colorWithRed_green_blue_alpha(0,0.5,0.5,1))
对于Objective-C类的属性变量,在JavaScript中只能使用getter与setter方法来访问,示例如下:
label.setText("JSPatch")
提示:如果原Objective-C的方法中已经包含了_符号,则在JavaScript中使用__代替。
3.在JavaScript中操作与修改Objective-C类
JSPatch的最大应用是在应用运行时动态的操作和修改类。
重写或者添加类的方法:
在JavaScript中使用defineClass来定义和修改类中的方法,其编写格式如下所示:










