延迟后触发带有2个参数的功能

时间:2014-01-28 08:00:56

标签: ios selector grand-central-dispatch nstimer

有人可以帮我解决这个问题:我需要在确定的时间(2或3秒)后触发一个带有2个参数的功能。
我试图用dispatch_after块做到这一点,但是它可以引导我发送到解除分配的实例的消息。
我也试过了NSInvocation和预定的计时器,但我的参数是布尔值,所以我不能使用setArgument:atIndex:

对此有何提示?

编辑 添加示例代码

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2.5 * NSEC_PER_SEC ), dispatch_get_main_queue(), ^{
    [myPullableView setOpened:NO animated:YES];
});

取消分配视图控制器后,其属性(以及myPullableView)也将被释放。

是的,我正在使用ARC。

2 个答案:

答案 0 :(得分:3)

保持当前的块方法,只需使引用变弱,以便引用它是安全的:

__weak typeOf(myPullableView) *weakPullableView = myPullableView;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2.5 * NSEC_PER_SEC ), dispatch_get_main_queue(), ^{
    [weakPullableView setOpened:NO animated:YES];
});

答案 1 :(得分:1)

[self performSelector:@selector(delayDo:) withObject:@[@NO, @YES] afterDelay:2.0] ;

- (void)delayDo:(NSArray *)array
{
    NSNumber * num1 = array[0] ;
    NSNumber * num2 = array[1] ;
    BOOL open = [num1 boolValue] ;
    BOOL animated = [num2 boolValue] ;
    [myPullableView setOpened:NO animated:YES] ;
}

在dealloc时取消延迟操作。

- (void)dealloc
{
    [NSObject cancelPreviousPerformRequestsWithTarget:self] ;
}
相关问题