开启后,NSTimer定时针失效
xhm121 opened this issue · 5 comments
Describe the bug
OC版本中的
PushViewController.m文件中 - (void)testTimer方法,将_t 的target由self 变成[HMTimerProxy timerProxyWithObject:self] ,如下:
_t = [NSTimer scheduledTimerWithTimeInterval:0.1 target:[HMTimerProxy timerProxyWithObject:self] selector:@selector(scheduledMethod:) userInfo:nil repeats:YES];
HMTimerProxy是我自己的创建的一个对象,继承自NSObject
问题: 将定时器的target由self变成一个自己创建的第三者,就会导致定时器失效
#import "HMTimerProxy.h"
@interface HMTimerProxy ()
@Property (nonatomic, weak) id weakobject;
@implementation HMTimerProxy
- (instancetype)timerProxyWithObject:(id)weakObject {
HMTimerProxy *timerProxy = [[HMTimerProxy alloc] init];
timerProxy.weakobject = weakObject;
return timerProxy;
}
-
(NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector {
if (self.weakobject) {
return [self.weakobject methodSignatureForSelector:aSelector];
} else {
return [super methodSignatureForSelector:aSelector];
}
} -
(void)forwardInvocation:(NSInvocation *)anInvocation {
SEL selector = anInvocation.selector;
if ([self.weakobject respondsToSelector:selector]) {
[anInvocation invokeWithTarget:self.weakobject];
} else {
[super forwardInvocation:anInvocation];
}
}
明白你的问题了,这是因为NSTimer的中间者做了selector的验证,它需要显示的写对应的方法且存在,不支持你这种中间转发的方式
明白你的问题了,这是因为NSTimer的中间者做了selector的验证,它需要显示的写对应的方法且存在,不支持你这种中间转发的方式
我看了市面上好几套防崩溃的框架,都会出现这个问题