您的位置:首页 > 产品设计 > UI/UE

cancelPreviousPerformRequestsWithTarget

2014-07-20 13:57 309 查看
假设:不定期会有某个事件发生,需要针对这个事件做出相应,但是又不想针对每个相同的事件都做相应,

方法一,使用timer

在事件发生时,启动一个timer

- (void)onEventArrival

{

// Before we start the timer, cancel the previous one

if ( timerEvent!=nil )

[timerEvent invalidate];

timerEvent = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self

selector:@selector(doSomethingOnEvent) userInfo:nil repeats:NO];

}

- (void)doSomethingOnEvent

{

// clear timerEvent to indicator no timer now

timerEvent = nil;

// do real jog here

}

方法二,使用cancelPreviousPerformRequestWithTarget

- (void)onEventArrival{

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(doSomethingOnEvent) object:nil];

[self performSelector:@selector(doSomethingOnEvent) withObject:nil afterDelay:1.0];

}

// 两个取消延时处理的方法原型如下

+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(id)anArgument;

+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget;

注意

cancelPreviousPerformRequestsWithTarget不能取消带参数的,而对于

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;

情况,发现如果是带参数,那取消时的参数也要一致,否则不能取消成功

最近看到大家对cancelPreviousPerformRequestsWithTarget不能取消带参数的

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;

情况,写了一点点代码调试了一下,发现如果是带参数,那取消时的参数也要一致,否则不能取消成功

[cpp] view
plaincopy

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(didRuninCurrModel:) object:[NSNumber numberWithBool:YES]];//可以取消成功。

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(didRuninCurrModel:) object:[NSNumber numberWithBool:NO]];//不能取消成功。参数不匹配

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(didRuninCurrModel:) object:nil];//不能取消成功。参数不匹配
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐