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