JSPatch 的坑
返回值为 Struct 类型时
通过 [methodSignature methodReturnType] 获取到 CMDeviceMotion 的gravity 属性 返回值类型 为 {?=ddd}。
而正常情况下,例如,我们获取 view的frame,返回值类型为 {CGRect={CGPoint=dd}{CGSize=dd}}
原因:当定义 struct 结构体时,如下定义,则 [methodSignature methodReturnType] 检测到该返回值类型为 {?=ddd}
因为下面这样只是定义了一个tag name 为 CMAcceleration 的结构体,tag name 不是类型名,所以methodReturnType获取不到该类型名
typedef struct {
double x;
double y;
double z;
} CMAcceleration;
如果是下面定义struct 结构体,则可以正确检测返回值类型
struct CMAcceleration {
double x;
double y;
double z;
};
typedef struct CMAcceleration CMAcceleration;
JavaScriptCore 是垃圾回收,OC则是引用计数
JavaScriptCore 会持有oc 对象,直到JavaScriptCore执行内存池清理时才会释放。如果你在javascript 代码中创建了
一个很大的oc对象,该对象的生命周期并不如你想象的及时释放。