私は最近、以下がマークされたコードに「割り当て」られました#warning memory leak
- (void)aMethodWithCallback:(BlockType)completedBlock {
/* Do stuff */
completedBlock = ^(Class1 *obj, NSError *error) {
/* Do stuff */
#warning memory leak
if (completedBlock) {
completedBlock(obj, error);
}
};
[self callAnotherMethodWithCallback::completedBlock];
}
どうすればいいのかわかりませんが、入力ブロックとして名前のブロックを作成するのは奇妙に見えますが、うまくいくようです。上記のコードが危険なのはなぜですか?
edit ARC が有効になっています。
コードを次のように変更したところ、もうリークしていないようです。
- (void)aMethodWithCallback:(BlockType)completedBlock {
/* Do stuff */
BlockType completedBlock2 = ^(Class1 *obj, NSError *error) {
/* Do stuff */
if (completedBlock) {
completedBlock(obj, error);
}
};
[self callAnotherMethodWithCallback::completedBlock2];
}