среда, 17 октября 2012 г.

ARC и [[self retain] autorelease]


Иногда нужно быть уверенным, что объект просуществует как минимум до конца собственного вызванного метода. 
До ARC мы обычно писали в таких случаях [[self retain] autorelease]; (выглядит не очень приятно, согласен), но ARC в числе прочих забот принес и необходимость ввести какую-то замену этому способу.
Думаю, когда обычные разработчики оказываются перед подобной проблемой, они обычно спрашивают себя: "А что бы сделали разработчики из Apple?". К счастью, в данном случае разработчики Apple продемонстрировали свой вариант решения проблемы, на который я наткнулся просматривая обновленный код демо-проекта SimplePing.
Дабы не быть голословным приведу просто код. 
Итак, в теле метода, где self должен гарантированно существовать на момент завершения вызова метода:

 [self performSelector:@selector(noop) withObject:nil afterDelay:0.0];

Само же описание метода феноменально:
- (void)noop
{

}

Ну что ж, ребятам, которые знают, что происходит "под капотом" можно верить, а немного подумав можно прийти к выводу, что все вполне разумно. Но лично я бы нескоро до этого догадался.

Комментариев нет:

Отправить комментарий