blocos em nsdictionary?

Então, eu estou armazenando ações de bloco em um nsmutabledictionary e, em seguida, recuperando-as quando uma resposta retorna em um websocket. Isso transforma a solicitação assíncrona em uma sintaxe de bloco. Aqui está o código simplificado:

- (void)sendMessage:(NSString*)message responseAction:(void (^)(id))responseAction
{ 
    NSString *correlationID =  (NSString*)[[message JSONValue] objectForKey:@"correlationId"];

    [self.messageBlocks setObject:responseAction forKey:correlationID];

    NSLog(@"Sending message: %@", correlationID);
   [webSocket send:message];
}

- (void)webSocket:(SRWebSocket *)wsocket didReceiveMessage:(id)message;
{
    NSString *correlationID = (NSString*)[[message JSONValue] objectForKey:@"correlationId"];
    NSLog(@"Incoming message. CorrelationID: %@", correlationID);
    void (^action)(id) = nil;
    if (correlationID) {
        action = [messageBlocks objectForKey:correlationID];
        if (action) action([message JSONValue]);
        [messageBlocks removeObjectForKey:correlationID];
    }
}

Nota: O servidor responde com um ID de correlação enviado com a solicitação. Portanto, cada resposta é vinculada a cada solicitação por meio desse id.

Isso funciona perfeitamente, melhor do que eu esperava. A pergunta que tenho é que é seguro executar blocos dessa maneira? Está chamando [messageBlocks removeObjectForKey: correlationID]; o suficiente para removê-lo da memória. Lembro-me de pré-ARC, block_release era uma opção.

questionAnswers(1)

yourAnswerToTheQuestion