私はブロックを取るメソッドを持っています:
- (void)methodWithBlock:(blockType)block
block
このメソッドは、使用する前に非同期処理を実行するため、コピーから開始します。それ以外の場合は破棄されます。次に、別のブロック内でメソッドを呼び出し、そのブロック内でメソッドを解放します。要約すると:
- (void)methodWithBlock:(blockType)block
{
block = [block copy];
[something asyncStuffWithFinishedBlock:^{
// ..
block();
[block release];
}];
}
CLANGは、「ブロック」のメモリリークについて文句を言います。コピーステートメントとリリースステートメントを削除すると、ブロックは呼び出されるまでになくなります。少なくとも以前のクラッシュは、これが当てはまることを示しています。
これは物事を行うための間違った方法ですか?もしそうなら、私は上記をどのように行うべきですか?つまり、メソッドのブロックステートメント内からのブロックコールバックですか?非同期部分が発生している間、メソッドが異なる引数で繰り返し呼び出される可能性があるため、ブロックをインスタンス変数として格納することはできません。