Referencia de un objeto NSOperation en su propio bloque de finalización con ARC

Tengo dificultades para convertir un código de NSOperation a ARC. Mi objeto de operación utiliza un bloque de finalización, que a su vez contiene un bloque GCD que actualiza la interfaz de usuario en el hilo principal. Debido a que hago referencia a mi objeto de operación desde su propio bloque de finalización, estoy usando un puntero __weak para evitar una pérdida de memoria. Sin embargo, el puntero ya está establecido en nulo cuando se ejecuta mi código.

Lo he reducido a este ejemplo de código. ¿Alguien sabe dónde me equivoqué y la forma correcta de lograr esto?

NSOperationSubclass *operation = [[NSOperationSubclass alloc] init];
__weak NSOperationSubclass *weakOperation = operation;

[operation setCompletionBlock:^{
    dispatch_async( dispatch_get_main_queue(), ^{

        // fails the check
        NSAssert( weakOperation != nil, @"pointer is nil" );

        ...
    });
}];

Respuestas a la pregunta(6)

Su respuesta a la pregunta