блоки в обязательном порядке?

Таким образом, я сохраняю действия блока в nsmutabledictionary и затем вспоминаю их, когда ответ возвращается в веб-сокет. Это превращает асинхронный запрос в блочный синтаксис. Вот сокращенный код:

- (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];
    }
}

Примечание. Сервер отвечает ID корреляции, который отправляется вместе с запросом. Таким образом, каждый ответ связан с каждым запросом через этот идентификатор.

Это работает отлично, лучше, чем я ожидал. Вопрос, который у меня возник, заключается в том, безопасно ли запускать блоки таким образом? Вызывает [messageBlocks removeObjectForKey: correlationID]; достаточно, чтобы удалить его из памяти. Я помню pre-ARC, block_release был вариант.

Ответы на вопрос(1)

Ваш ответ на вопрос