Блок обрабатывается как объекты, поэтому ARC не позволяет вам приводить их к void *
без явного связывания.Странно, что ваш компилятор не жалуется на Block_release
: он должен (на моем компьютере это делает).
Поскольку ARC рассматривает блок как объекты, вам не нужно использовать Block_copy
и Block_release
больше.Скопируйте блок (с помощью -[NSObject copy]
), когда вы хотите, чтобы он переместился в кучу, и позвольте компилятору управлять остатком.
-[NSObject performSelectorOnMainThread:withObject:waitUntilDone:]
сохраняет получатель и объект параметра, пока метод не будет вызван.Таким образом, ваш блок будет сохранен и освобожден при необходимости.Все, что вам нужно сделать, это убедиться, что блок не сохранен в стеке, отправив сообщение copy
перед передачей его методу.
Более того, существует более простой способ диспетчеризации выполненияблок: это libdispatch (он же GCD).
dispatch_async(dispatch_get_main_queue(), resizer);