我想调用一个方法
-(void) fooWithObject:(MyObject *)obj;
在给定时间(NSDate
实例)
不阻塞主线程。
解决这个问题的最佳方法是什么?我见过 NSTimer
、performSelector
和 NSOperation
,但读了其中的一些内容让我更加困惑。
重要:
- 能够将对象传递给我正在调用的方法
- 设置执行时间的方法
- 非阻塞
- 不需要重复
干杯!
最佳答案
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,因此选择器将“尽快”执行。
关于macos - 在 Cocoa 中安排方法调用的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17146928/