在集成JSbridge 的时候,遇到一些的奇怪的场景,前端调用本地方法的时候会回调方法多次,原因不明确,可能是多次注册了jsbridge的方法。在前端没法解决问题的情况下,原生怎么解决一个方法被回调很多次的情况呢?
答案是利用延迟执行,首先定义一个NSTimer 来模拟一个重复事件:
self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(repeatDoSomeThing) userInfo:nil repeats:YES];
每0.1秒重复执行一个方法。下面是延迟执行的方法:
-(void)repeatDoSomeThing{
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(startDoSomeThing) object:nil];
[self performSelector:@selector(startDoSomeThing) withObject:nil afterDelay:0.2];
}
每次先取消延迟执行,在延迟0.2秒执行,这样重复的操作就会被过滤只剩最后一个执行,当然这里的延迟时间要大于重复事件的时间间隔。
代码demo:
https://github.com/ThirdPrince/ios_filter_-duplicate_events