gpt4 book ai didi

ios - 释放定时器 block 中使用的内存,但在停止定时器时从中分配

转载 作者:行者123 更新时间:2023-11-28 17:38:50 25 4
gpt4 key购买 nike

我正在声明一个计时器,用一个 block 指定它的代码(以便每 x 秒执行一次此代码)。

我希望计时器在用户点击按钮时启动,因此我在 IBAction 函数中创建并恢复计时器。

最后,这就是问题所在,因为 block 中管理的数据始终具有相同的大小,为了避免每次计时器触发时分配和释放内存,我将内存分配为 block 外的 __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);

}

最佳答案

这不是通过将“array”设为实例变量(通过在 .h 文件中声明它)来解决的吗?

只是另一个问题:你真的想使用 GCD 的低级 API 吗? NSTimer 还不够吗?或者我没有正确解释您的代码?

关于ios - 释放定时器 block 中使用的内存,但在停止定时器时从中分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8953175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com