bang590 / JSPatch

JSPatch bridge Objective-C and Javascript using the Objective-C runtime. You can call any Objective-C class and method in JavaScript by just including a small engine. JSPatch is generally used to hotfix iOS App.
MIT License
11.37k stars 2.25k forks source link

无法覆盖消息转发的那几个方法? #858

Open liangdahong opened 4 years ago

liangdahong commented 4 years ago

是否无法覆盖消息转发的方法?如下几个,主要是为了 处理服务器返回 null 的问题处理,在消息转发阶段防止崩溃。

- (id)forwardingTargetForSelector:(SEL)aSelector;
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector;
- (void)forwardInvocation:(NSInvocation *)invocation;

JS 如下,只是模拟。

defineClass("NSNull", {
    forwardingTargetForSelector: function(aSelector) {
        return {};
    }
}, {});

可以覆盖成功,但是 null 发送消息的时候会导致无限循环调用,最后报野指针错误。

image

感谢!