macos - 在 Cocoa 中安排方法调用的方法?

标签 macos cocoa nsdate nstimer background-process

我想调用一个方法

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

在给定时间(NSDate 实例)

不阻塞主线程。

解决这个问题的最佳方法是什么?我见过 NSTimerperformSelectorNSOperation,但读了其中的一些内容让我更加困惑。

重要:

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

干杯!

最佳答案

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/

相关文章:

ios - secondsFromGMT 在设备和模拟器上返回不同的值

c++ - 无法抑制 Mac OS X 上的特定 clang 警告

python - 退出 PsychoPy 窗口

iphone - 当多个项目同时打开时,XCode 如何知道要调试到哪个项目?

objective-c - dateFromComponents : 的意外结果

ios - Objective-C - 从两个字符串创建 NSDate

macos - vim中man命令输出全是^H

c - Mac 上的 lldb 内存读取错误

objective-c - 用户清空垃圾时通知?

cocoa - 当 SKSpriteNode 仅在屏幕上移动时,如何显示阴影或任何发光效果?