没有任何内存问题 - 延迟后重复异步调用方法
without any memory issue- calling asynchronously a method repetedly after delay
如何异步调用特定方法 以高效的方式重复延迟,从而最小内存使用量 而不会影响应用程序性能。
我知道我们可以在 dispatch_async
中直接做到这一点,但不确定它是如何工作的,或者它是否是一种有效的方法。
如有任何建议或帮助,我们将不胜感激。
谢谢
您应该使用调度计时器。这是一个每 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
至于内存占用,就看你调用的方法了。设置定时器本身所需的内存可以忽略不计。
如何异步调用特定方法 以高效的方式重复延迟,从而最小内存使用量 而不会影响应用程序性能。
我知道我们可以在 dispatch_async
中直接做到这一点,但不确定它是如何工作的,或者它是否是一种有效的方法。
如有任何建议或帮助,我们将不胜感激。
谢谢
您应该使用调度计时器。这是一个每 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
至于内存占用,就看你调用的方法了。设置定时器本身所需的内存可以忽略不计。