¿Se puede bloquear la captura de un object CoreFundation?

En el documento de Apple no puedo encontrar lo que puedo hacer cuando quiero capturar un object CoreFoundation .

Pero en la Guía de progtwigción de concurrency de Apple. Parece que el código de muestra usa algún código cuando el object de envío no es compatible con ARC así:

void average_async(int *data, size_t len, dispatch_queue_t queue, void (^block)(int)) { // Retain the queue provided by the user to make // sure it does not disappear before the completion // block can be called. dispatch_retain(queue); // Do the work on the default concurrent queue and then // call the user-provided block with the results. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ int avg = average(data, len); dispatch_async(queue, ^{ block(avg);}); // Release the user-provided queue when done dispatch_release(queue); }); } 

¿Debo utilizar CFObject como el DispatchObject antes? ¿Pero si necesito invocar el bloque muchas veces?

Tal vez pueda usar __attribute__((NSObject)) , ¡pero no sé lo que sucederá!

¿Apple dice algo al respecto?

No vi nada en Apple explícitamente, pero veo algunas menciones en la documentation de llvm.org , que encontré elaborada en este hilo de la list de correo de Cocoa-dev .

Parece que debería estar bien para usar __attribute__((NSObject)) , ya que se le asigna una calificación " __strong " implícita (de la documentation) y en un sentido práctico (del hilo de la list de correo), el object se retiene cuando el bloque se pone en queue y se libera cuando termina el bloque.

En primer lugar, dispatch_queue_t no es un object Core Foundation.

Los objects de envío son considerados objects Objective-C por el comstackdor (para fines ARC y bloques) si su objective de implementación es iOS 6+ / OS X 10.8+ .