Я объявляю таймер, определяющий его код блоком (для выполнения этого кода каждые x секунд).Освобождение памяти, используемой в блоке таймера, но выделенной из нее, при остановке таймера
Я хочу, чтобы таймер запускался, когда пользователь нажимает кнопку, поэтому я создаю и возобновляю таймер внутри функции, которая является IBAction.
И, наконец, это проблема, так как данные, управляемые в блоке, всегда имеют одинаковый размер, чтобы избежать выделения и освобождения памяти каждый раз, когда срабатывает таймер, я выделяю память как указатели __block из блока , но внутри функции (они не могут быть объявлены из этой локальной области).
Все работает нормально, но я хочу, с другой кнопкой, остановить и перезапустить таймер несколько раз, поэтому ¿как я могу освободить память, выделенную в функции? Я хочу выделить его каждый раз, когда кнопка «Begin Button» срабатывает, а не каждый раз, когда срабатывает таймер, и освобождайте его, когда нажата кнопка «Stop». ¿Возможно ли с помощью этой структуры кода? ¿Каков наилучший способ сделать то, что я хочу?
Это код:
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);
}
Jodocus, я думаю, что сделаю то, что вы говорите, выделив память в viewDidLoad. В таком случае, где я должен освобождать указатели? Должен ли я писать «free (array)» в dealloc или он не нужен? – angeleke
Я не использовал NSTimer, потому что я читал, что он тяжелее, чем таймеры низкого уровня, и он имеет более низкую точность. Во всяком случае, это временное решение, потому что я понятия не имею об этом, но я, вероятно, изменю его. благодаря – angeleke