EXC_BAD_ACCESS ao copiar ou reter o Bloco

Até onde eu entendo, um bloco age como um objeto, pois você pode copiar ou liberar mensagens para ele, por exemplo:

[myBlock copy];

No entanto, sempre que faço isso ou libero um bloco, recebo EXC_BAD_ACCESS.

Se eu usar as funções de bloco, tudo funcionará conforme o esperado, por exemplo

Block_copy(myBlock);

Eu pensei que as duas formas de liberar e copiar blocos eram idêntica

Não é um problema tão grande, mas é um pouco chato que, se eu tiver uma propriedade (cópia) que é um Bloco, eu mesma precise escrever o método sette

Por exemplo: Com Propriedades:

//Header
@property (nonatomic, copy) void (^cancelledBlock)(void);

//Implementation
@sythesize cancelledBlock;

lead para EXC_BAD_ACCESS ao definircancelledBlock

mas se eu fizer:

//Header
@property (nonatomic, copy) void (^cancelledBlock)(void);

//Implementation
@sythesize cancelledBlock; //saves me doing the getter as well

- (void)setCancelledBlock:(void (^)(void))aCancelledBlock {
    if (cancelledBlock == aCancelledBlock) {
        return;
    }
    void (^oldValue)(void) = cancelledBlock;
    cancelledBlock = Block_copy(aCancelledBlock);
    Block_release(oldValue);

}

não existe EXC_BAD_ACCESS e tudo corre como deveri

questionAnswers(1)

yourAnswerToTheQuestion