У меня есть следующий код для загрузки изображения:ASIHTTPRequest completionBlock + ARC
imageRequest = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:magazineItem.contentURL]];
__weak ASIHTTPRequest *weakRequest = imageRequest;
__block typeof (self) bself = self;
[imageRequest setCompletionBlock:^{
if (weakRequest.responseStatusCode == 200) {
bself.imageData = weakRequest.responseData;
[[DataAccessLayer sharedInstance] storeTemporaryContentData:bself.imageData url:magazineItem.contentURL];
bself.contentImage = [UIImage imageWithData:bself.imageData];
if (bself.contentImage != nil) {
if (bself.magazineItem.presentationStyle.intValue != -1) {
[bself setPresentationStyle:bself.magazineItem.presentationStyle.intValue];
}
else {
[bself setPresentationStyleForImage:bself.contentImage];
}
}
else
[bself.delegate contentItemViewUnavailable:bself];
}
else {
[bself.delegate contentItemViewUnavailable:bself];
}
}];
[imageRequest setFailedBlock:^{
if (weakRequest.error.code == 4)
return;
[bself.delegate contentItemViewUnavailable:bself];
}];
[imageRequest startAsynchronous];
И хотя я использую __block typeof (self)
идентификатор, чтобы передать себя в блок, он по-прежнему получает удерживаемое. Я также попробовал __weak MyClassName *bself = self;
, и он все еще попадает в цикл сохранения. Кажется, я что-то пропустил, может кто-нибудь заполнить меня тем, что я делаю неправильно?
Для справки imageRequest
является __strong iVar в моей категории файлов .m.
Заранее спасибо.
ли вы установили imageRequest сильный? @propert (неатомный, сильный) ASIHTTPRequest * imageRequest; – janusbalatbat
Да, iVar по умолчанию сильно, но я использую другой запрос как слабую ссылку на сильную, сохраняя ее в памяти для дальнейших операций, таких как cancel. – Eugene