以前にも同様の質問がありましたが、これらの回答で現在の問題を解決することはできませんでした。
状況:
CustomType *Object;
BOOL (^doAverage)(CustomType *, int, int) = ^(CustomType *Trigger, int Total, int Pulse) {
//Calculate Average from Total and Pulse
Total /= Pulse;
[Trigger setValue:Total];
};
Object = [CustomType CreateObject]; //Autoreleased Object
[Object addCallback:^{ return doAverage(Object, 56, 32); }];
[Array addObject:Object]; //Adds to collection.
おそらくすでに理解しているように、目前の問題は保持サイクルです。
Object
ブロックへの参照をに保持しaddCallback
、ブロックdoAverage
はへの参照を保持しますObject
。
Object
複数のオブジェクトに変数を再利用したいので、インスタンス変数を使用することは問題外です。(一時変数)。
ローカル変数を使用すると、保持カウントが発生します。
また、コールバックが実際に呼び出されると、何らかの理由でnilになる__block CustomType *Object
ため、使用も機能しません。Trigger
何か案は?
私にはその場しのぎの解決策がありますが、それはかなり...ハッキーなようです。