我正在声明一个计时器,用一个块指定它的代码(为了每 x 秒执行一次此代码)。
我希望定时器在用户点击按钮时启动,所以我在一个 IBAction 函数中创建并恢复定时器。
最后,这就是问题所在,因为块中管理的数据始终具有相同的大小,为了避免每次定时器触发时分配和释放内存,我将内存分配为块外的 __block 指针,但在块内函数(它们不能被声明在这个本地范围之外)。
一切正常,但我想用另一个按钮停止并重新启动计时器几次,所以¿我怎样才能释放函数中分配的内存?我想在每次点击“开始按钮”时分配它,而不是每次触发计时器时分配它,并在点击“停止按钮”时释放它。¿ 这种代码结构是否可行?¿ 做我想做的事的最佳方式是什么?
这是代码:
dispatch_source_t creaTimer(uint64_t interval,uint64_t leeway, dispatch_queue_t queue, dispatch_block_t block){
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,0,0,queue);
if (timer)
{
dispatch_source_set_timer(timer, dispatch_walltime(NULL, 0), interval, leeway);
dispatch_source_set_event_handler(timer, block);
}
return timer;
}
-(IBAction) begin{
__block double *array;
array = (double*) malloc (512);
timer = creaTimer(5ull * NSEC_PER_SEC, 0, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0)
,^{
//it uses the space allocated in *array;
});
dispatch_resume(timer);
}