jezzmemo / JJException

Protect the objective-c application(保护App不闪退)
MIT License
1.63k stars 268 forks source link

程序启动crash, `fireTimer` #134

Open malgee012 opened 1 year ago

malgee012 commented 1 year ago

报错文件 NSTimer+CleanTimer.m

image

错误定位代码

- (void)fireTimer{
    if (!self.target) {
        [self.timer invalidate];
        self.timer = nil;
        handleCrashException(JJExceptionGuardNSTimer,[NSString stringWithFormat:@"Need invalidate timer from target:%@ method:%@",self.targetClassName,self.targetMethodName]);
        return;
    }
    if ([self.target respondsToSelector:self.selector]) {
        // Fix swift case, the parent class is SwiftObject, did not invoke the methodSignatureForSelector method
        // https://github.com/jezzmemo/JJException/issues/123
        ((void(*)(id, SEL, NSTimer*))objc_msgSend)(self.target, self.selector, _timer);
    }
}
malgee012 commented 1 year ago
image
sharehoney commented 1 year ago

我也遇到了这种情况。 在 NSTimer+CleanTimer.m中 把 @property(nonatomic,readwrite,【weak】)id target 改成 @property(nonatomic,readwrite,【strong】)id target 可以避免,但是不确定是否会造成循环引用。

malgee012 commented 1 year ago

我也遇到了这种情况。 在 NSTimer+CleanTimer.m中 把 @Property(nonatomic,readwrite,【weak】)id target 改成 @Property(nonatomic,readwrite,【strong】)id target 可以避免,但是不确定是否会造成循环引用。

我当时也是这么改的, 目前没报错