EXC_BAD_ACCESS cuando se usa el bloque recursivo

Estoy tratando de crear recursividad usando bloques. Funciona por un tiempo, pero finalmente se bloquea y me da una mala excepción de acceso. Este es mi código:

BOOL (^Block)(Square *square, NSMutableArray *processedSquares) = ^(Square *square, NSMutableArray *processedSquares) {
    [processedSquares addObject:square];

    if (square.nuked) {
        return YES; // Found a nuked square, immediately return
    }

    for (Square *adjacentSquare in square.adjacentSquares) {
        if ([processedSquares containsObject:adjacentSquare]) {
            continue; // Prevent infinite recursion
        }

        if (Block(adjacentSquare, processedSquares)) {
            return YES;
        }
    }

    return NO;
};

__block NSMutableArray *processedSquares = [NSMutableArray array];
BOOL foundNukedSquare = Block(square, processedSquares);

Explicación: tengo unSquare clase que tiene un BOOLnuked. También tiene una matriz NSAadjacentSquares que contiene otros cuadrados.

Quiero verificar si un cuadrado, o uno de sus cuadrados 'conectados', está nuclear o no.

La matrizprocessedSquares es hacer un seguimiento de los cuadrados que he marcado para evitar una recursión infinita.

Cuando ejecuto esto, está haciendo muchas llamadas de este bloque (como se esperaba). Pero en algún momento, se bloquea en la última línea con una excepción de mal acceso.

También obtengo esto en la consola:

No se puede acceder a la memoria en la dirección 0x1
No se puede acceder a la memoria en la dirección 0x1
No se puede acceder a la memoria en la dirección 0x1
No se puede acceder a la memoria en la dirección 0x1
advertencia: cancelar la llamada: el código objc en la pila del hilo actual hace que esto sea inseguro.

No estoy tan familiarizado con los bloqueos y la recursividad. ¿Algunas ideas?

Editar 1

Según lo solicitado, la traza inversa:

#0  0x00000001 in ??
#1  0x000115fb in -[Square connectedToNukedSquare] at   Square.m:105
#2  0x00010059 in __-[Bot makeMove]_block_invoke_1 at Bot.m:94
#3  0x91f3f024 in _dispatch_call_block_and_release
#4  0x91f31a8c in _dispatch_queue_drain
#5  0x91f314e8 in _dispatch_queue_invoke
#6  0x91f312fe in _dispatch_worker_thread2
#7  0x91f30d81 in _pthread_wqthread
#8  0x91f30bc6 in start_wqthread

Respuestas a la pregunta(3)

Su respuesta a la pregunta