Iphone 生成分派源计时器事件时内存泄漏

Iphone 生成分派源计时器事件时内存泄漏,iphone,ios,ipad,memory-leaks,grand-central-dispatch,Iphone,Ios,Ipad,Memory Leaks,Grand Central Dispatch,我们正在使用调度队列生成计时器事件。以下是执行此任务的代码: dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue); if (!timer) return self; dispatch_source_set_timer(timer,

我们正在使用调度队列生成计时器事件。以下是执行此任务的代码:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue); if (!timer) return self; dispatch_source_set_timer(timer, dispatch_walltime(NULL, 0), interval * NSEC_PER_SEC, 5 * NSEC_PER_SEC); dispatch_source_set_event_handler(timer, ^{ //Some work… }); 调度队列=调度获取全局队列(调度队列优先级默认为0); 定时器=调度\源\创建(调度\源\类型\定时器,0,0,队列); 如果(!timer)返回self; 调度源设置定时器(定时器,调度时间(NULL,0),间隔*纳秒/秒,5*纳秒/秒); 调度\u源\u集\u事件\u处理程序(计时器, ^{ //一些工作… }); 这非常有效,只是当我们运行探查器时,我们发现这些方法存在大量内存泄漏:

  • 调度\u源\u创建
  • 调度\源\设置\计时器
  • 调度\u源\u集\u事件\u处理程序
我们已经确保使用dispatch_release()方法释放计时器

如果我们在上面的代码中有任何错误,有人能告诉我们吗?此外,如果您能指出计时器事件生成的任何示例,这将非常有用。

所有计时器将无限期重复,直到 调用dispatch\u source\u cancel()

如何为计时器调用dispatch\u source\u cancel()和dispatch\u release()

调度源计时器示例:

dispatch_source_t timer = dispatch_source_create(
    DISPATCH_SOURCE_TYPE_TIMER, 0, 0,
        dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0));

dispatch_source_set_timer(timer,
    dispatch_time(DISPATCH_TIME_NOW, 1ull * NSEC_PER_SEC),
        DISPATCH_TIME_FOREVER, 1ull * NSEC_PER_SEC);

dispatch_source_set_event_handler(timer, ^{
    NSLog(@"wakeup!");

    dispatch_source_cancel(timer);
});

dispatch_source_set_cancel_handler(timer, ^{
    NSLog(@"canceled");

    dispatch_release(timer);
});

dispatch_resume(timer);

所有计时器将无限期重复,直到 调用dispatch\u source\u cancel()

如何为计时器调用dispatch\u source\u cancel()和dispatch\u release()

调度源计时器示例:

dispatch_source_t timer = dispatch_source_create(
    DISPATCH_SOURCE_TYPE_TIMER, 0, 0,
        dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0));

dispatch_source_set_timer(timer,
    dispatch_time(DISPATCH_TIME_NOW, 1ull * NSEC_PER_SEC),
        DISPATCH_TIME_FOREVER, 1ull * NSEC_PER_SEC);

dispatch_source_set_event_handler(timer, ^{
    NSLog(@"wakeup!");

    dispatch_source_cancel(timer);
});

dispatch_source_set_cancel_handler(timer, ^{
    NSLog(@"canceled");

    dispatch_release(timer);
});

dispatch_resume(timer);

谢谢你的回复。我比较了你的示例代码和我的示例代码。看起来几乎一样。我在dealloc中执行取消和释放,我可以看到正在调用。对我来说,计时器事件已正确启动,一切正常。问题是,我在运行探查器时看到内存泄漏。感谢您的回复。我比较了你的示例代码和我的示例代码。看起来几乎一样。我在dealloc中执行取消和释放,我可以看到正在调用。对我来说,计时器事件已正确启动,一切正常。问题是,我在运行探查器时看到内存泄漏。