一种在Cocoa中调度方法调用的方法?

时间:2013-06-17 11:56:23

标签: macos cocoa nsdate nstimer background-process

我想调用方法

-(void) fooWithObject:(MyObject *)obj;

在给定时间(NSDate实例)

不阻塞主线程。

最好的方法是什么?我见过NSTimerperformSelectorNSOperation,但每次阅读都让我更加困惑。

重要的:

  • 能够将对象传递给我正在调用的方法
  • 设定执行时间的方法
  • 非阻止
  • 不需要重复

干杯!

1 个答案:

答案 0 :(得分:1)

performSelector:withObject:afterDelay可用于此目的。延迟是相对的,因此您需要计算所需日期和当前时间之间的差异。像这样的东西(在iPad上直接输入答案 - E& OE):

- (void) fooWithObject:(MyObject *)obj onDate:(NSDate *)onDate
{
    [self performSelector:@selector(fooWithObject:)
               withObject:obj
               afterDelay:MAX(0, [onDate timeIntervalSinceNow])
    ];
}

请注意,如果传入日期是过去的话,则使用MAX - 延迟将为0,因此选择器将“尽快”执行。

相关问题