Por que o bloco Objective-C ainda funciona sem copiá-lo para o heap?

Eu tenho um método simples na minha aula:

- (void)getFormWithBlock:(DataCenterResultBlock)block {
    [SomeClass doSomeLongOperationWithParam:someParam 
                                  completionBlock:^(NSData *data, NSURLResponse *response) {
                                      //Success
                                      block(aVar, YES);
                                  } errorBlock:^(NSError *error) {
                                      //Failed
                                      block(nil, NO);
                                  }];
}

Eu li que você deve copiar blocos para o heap, se você estiver fazendo algo de forma assíncrona, porque eles são alocados na pilha e uma vez que a árvore de chamada retrocederá, ela desaparecerá.

Mas aqui, eu não estou copiando para o heap, mas ainda não tenho nenhum acidente. Por quê? obrigado

questionAnswers(2)

yourAnswerToTheQuestion