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对象,该对象的生命周期并不如你想象的及时释放。

posted @ 2017-02-02 14:13  剑尖  阅读(393)  评论(0编辑  收藏  举报