The block is processed as objects, so ARC forbids you to translate them to void * without an explicit bridge. It is strange that your compiler does not complain about Block_release : it should (on my machine, it does).
Since ARC treats the block as objects, you no longer need to use Block_copy and Block_release . Copy the block (using -[NSObject copy] ) when you want it to move to the heap and allow the compiler to control the remainder.
-[NSObject performSelectorOnMainThread:withObject:waitUntilDone:] saves the receiver and parameter object until the method is called. Thus, your block will be saved and released when required. All you have to do is make sure the block is not stored on the stack by sending a copy message before passing it to the method.
In addition, there is an easier way to send a block execution: libdispatch (aka GCD).
dispatch_async(dispatch_get_main_queue(), resizer);
source share