我有以下代码来下载图像:
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。
提前谢谢。
试试
__block __unsafe_unretained typeof (self) bself = self;
--编辑--
实际解决问题的评论
访问 ivars 时,请使用 bself.property 执行此操作。如果您直接访问您的 ivar,它将获得一个保留周期。
正如这里所建议的 弱自引用的泛型类型
__weak __typeof__((__typeof__(self))self) bself = self