をコピーまたは保持EXC_BAD_ACCESS:例えば、その中にコピーを送ることができるか、それにメッセージをリリース、私の知る限りは、ブロックは、オブジェクトのように機能を理解するように、ブロック
[myBlock copy];
をしかし、私はこれを行うたび、またはリリースブロック、私はEXC_BAD_ACCESSを取得します。
私はブロックの機能を使用する場合は、予想通り、すべてが例えば、作品:
Block_copy(myBlock);
私はブロックを解放し、コピーの両方の方法が同一であったと思いましたか?
それはそれほど問題ではありませんが、ブロックであるプロパティ(コピー)があれば、自分でセッターメソッドを記述する必要があります。例えば
:プロパティを持つ:cancelledBlock
を設定するときに
//Header
@property (nonatomic, copy) void (^cancelledBlock)(void);
//Implementation
@sythesize cancelledBlock;
はEXC_BAD_ACCESSにつながるが、私がしなければ:
//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);
}
何EXC_BAD_ACCESSはありませんし、それが必要としてすべてが実行されます。
以前に保持またはコピーしたものだけをリリースしてください。 – Richard
私は私の質問で言うように、[myBlock copy]はEXC_BAD_ACCESSを返しますが、 'Block_copy(myBlock)'はしません。 –
完全な例を教えてください。 –