Since you do not use any parameters in your callback, you can simply use the standard dispatch_block_t, and since you just want to call it back when your long process is complete, there is no need to track it with a property, you could just do this:
- (void)doSomeLongThing:(dispatch_block_t)block { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
Then you implement it the same way you specified:
[downloader doSomeLongThing:^(void) { // do something when it is finished }];
source share