博客> JSPatch使用
JSPatch使用
2019-12-06 10:19 评论:0 阅读:1869 lvhahaha
热更新 JSPatch

JSPatch使用 主要注意语法上的不同。。。

  1. require require主要就是导入要使用的类,或者在代码中直接使用。(其中实力变量,私有变量使用的类也要导入)

2.OC方法跟JS方法

需要在方法后边加入()表示调用。如遇多个参数的方法,则使用_区分各个参数。

  1. defineClass a 寻找此类方法,或者变量。可以覆盖,修改已经存在的方法,或者添加,修改实例变量。

b 在方法名前加 ORIG 即可调用未覆盖前的 OC 原方法

c Super关键字使用,在JS中为self.Super()

d self == this (一般使用self)

e 修改实例变量,一般使用 setter修改值

f 获取私有变量,使用 valueForKey() 和 setValue_forKey() 获取/修改私有成员变量:

g 动态新增 Property setter一个新属性,然后初始化赋值使用

h 代理的使用,可以在定义时让一个类实现某些 Protocol 接口,写法跟 OC 一样: defineClass("JPViewController: UIViewController", { })

I 系统的枚举类型,在JS这里是拿不到的,所以在使用的过程中时,应该带上具体的值

j JSPatch原生支持 CGRect / CGPoint / CGSize / NSRange 这四个 struct 类型但是要写成这种类型。如:{x:20, y:20, width:100, height:100}

k 在JS使用字符串代表 Selector: 如 self.performSelector_withObject("viewWillAppear:", 1)

l nil和null的使用,在jS上null,oc为nil

m NSArray / NSString / NSDictionary要转为JS对象使用。.toJS()

n Block 当要把 JS 函数作为 block 参数给 OC时,需要先使用 block(paramTypes, function) 接口包装: JS 没有 block 类型的变量,OC 的 block 对象传到 JS 会变成 JS function,所有要从 JS 传 block 给 OC 都需 要用 block() 接口包装。 block 里使用 self 变量, var slf = self;在 block 里无法使用 self 变量,需要在进入 block 之前使用临时变量保存它。

O weak / strong 可以在 JS 通过 __weak() 声明一个 weak 变量,主要用于避免循环引用。 例如我们在 OC 里为了避免 block 导致的循环引用,经常这样写:

p GCD 使用 dispatch_after() dispatch_async_main() dispatch_sync_main() dispatch_async_global_queue() 接口调用GCD方法:可以直接使用JS封装的。其他要另外使用扩展

Q 宏 ,JS获得不了 oc代码中的宏,若要使用可以使用扩展,或者直接使用值。若要修改宏,则只能直接覆盖,替换。

r 全局变量,在类里定义的 static 全局变量无法在 JS 上获取到,若要在 JS 拿到这个变量,需要在 OC 有类方法或实例方法把它返回:

4.注意使用的规则

a,对于NSString / NSArray / NSDictionary / NSDate 在JS上跟OC对象是有区别的。记得使用,.toJS() 转化对象。 String 要转为js对象之后,.toJS() ,使用JS 字符串拼接方式。

b, NSNUmber 在JS上就是整型,所以可以直接使用比较大小。

C, 对于NSArray / NSDictionary 的 for...in 便利循环,也是需要转换为JS对象再便利

d, application:didFinishLaunchingWithOptions:方法不能修改

e, ViewDidload 修改之后,调用的顺序问题要适应

收藏
1
sina weixin mail 回到顶部