У меня есть некоторые операции, которые находятся внутри блоков. Это операция, только обновить UIImage
так:Блоки внутри NSMutableArray утечки (ARC)
^(UIImage *image) {
self.myImage = image;
}];
Моим образом рассчитывается путем доступа к Интернет с NSURLConnection
. Когда я получаю изображение из Интернета, я вызываю тот блок, который находится внутри NSMutableArray
. Все идет нормально. Моя проблема в том, что, когда у меня есть несколько изображений, имеющих один и тот же URL-адрес, вместо того, чтобы делать несколько вызовов, я просто добавляю новый блок в NSMutableArray
внутри класса, который обрабатывает соединение. Таким образом, я делаю один звонок и обновляю несколько изображений, которые используют 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. Итак, что может быть решением?
Утечки на скриншоте не исходят из кода, который вы опубликовали. Это строки C-стиля, созданные функцией 'strdup()', глубоко в рамках. Я не думаю, что вы должны беспокоиться о них. Я думаю, что они либо ложные срабатывания, либо из-за ошибок в рамках. –
На самом деле Кен, я наблюдал за приложением, и утечки все еще наступают, хотя блоки больше не используются (поскольку у вас уже есть изображения, вам больше не нужно их использовать) – Peres