我有以下代碼下載一個圖像: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
是我的.m文件類別中的__strong iVar。
在此先感謝。
你設置imageRequest強? @propert(非原子,強)ASIHTTPRequest * imageRequest; – janusbalatbat
是的,iVar在默認情況下是強壯的,但我使用另一個請求作爲強壯的一個弱引用,將其保存在內存中用於進一步操作,如取消。 – Eugene