没有任何内存问题 - 在延迟后重复地异步调用一个方法

时间:2015-07-01 07:55:43

标签: ios objective-c iphone ios8 grand-central-dispatch

如何以有效的方式反复调用特定方法异步 延迟,以便最小内存使用量而不会影响应用性能。

我知道我们可以直接在dispatch_async中做到这一点但不确定它是如何工作的,因此它是一种有效的方法。

任何建议或帮助将不胜感激。

由于

1 个答案:

答案 0 :(得分:1)

您应该使用调度计时器。这是一个每2秒调用一个块的简单示例:

@interface AppDelegate ()
{
    dispatch_source_t timer;
}

@end

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
    NSTimeInterval delayInSeconds = 2.0;
    NSTimeInterval leeway = delayInSeconds * 0.1;
    dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC, leeway * NSEC_PER_SEC);
    dispatch_source_set_event_handler(timer, ^{
        NSLog(@"Timer called");
    });
    dispatch_resume(timer);
}

@end

至于内存使用情况,这取决于您调用的方法。设置定时器本身所需的内存可以忽略不计。