Referenciar um objeto NSOperation em seu próprio bloco de conclusão com ARC

Estou tendo dificuldades para converter algum código NSOperation em ARC. Meu objeto de operação usa um bloco de conclusão, que por sua vez contém um bloco GCD que atualiza a interface do usuário no thread principal. Como faço referência ao meu objeto de operação de dentro de seu próprio bloco de conclusão, estou usando um ponteiro __weak para evitar um vazamento de memória. No entanto, o ponteiro já está definido como nulo quando meu código é executad

Eu reduzi-o a este exemplo de código. Alguém sabe onde eu errei e o caminho certo para fazer isso?

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" );

        ...
    });
}];