有人可以帮我解决这个问题:我需要在确定的时间(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
)也将被释放。
答案 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] ;
}