ブロック内にいくつかの操作があります。UIImage
この操作は、次のようにのみ更新します。
^(UIImage *image) {
self.myImage = image;
}];
私の画像は、インターネットにアクセスして計算されNSURLConnection
ます。インターネットから画像を受け取ると、 内にあるそのブロックを呼び出しますNSMutableArray
。ここまでは順調ですね。私の問題は、複数の呼び出しを行う代わりに、同じ URL を持つ複数の画像がある場合NSMutableArray
、接続を処理するクラス内に新しいブロックを追加するだけです。このようにして、1 つの呼び出しを行い、URL を共有する複数の画像を更新します。すべてが正常に機能します。問題は、ブロックがリークしていることです。次のようなブロックをに追加しますNSMutableArray
。
if( (self = [super init]) )
{
self.connectionURL=url;
self.arrayOfBlocks=[NSMutableArray array];
[arrayOfBlocks addObject:completion];
}
return self;
これは、接続クラスが初期化されるときです。これは、新しいブロックをに追加する必要があるときですNSMutableArray
(私はそれを追加するだけで、それだけです):
[arrayOfBlocks addObject:completion];
これは、最終的にコールバックを受け取り、ブロックの実行を開始するときです。
for (MyBlock blockToExecute in arrayOfBlocks)
{
blockToExecute([UIImage imageWithData:data]);
}
問題は、これがどういうわけか漏れていることです。私は ARC 環境にいるため、リリースまたは自動リリースを使用して対抗することができません。では、解決策は何でしょうか?