Iphone ASIHTTPRequest完成块+;弧

Iphone ASIHTTPRequest完成块+;弧,iphone,objective-c,ios,asihttprequest,block,Iphone,Objective C,Ios,Asihttprequest,Block,我有以下代码下载图像: imageRequest = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:magazineItem.contentURL]]; __weak ASIHTTPRequest *weakRequest = imageRequest; __block typeof (self) bself = self; [imageRequest setCompletionBlock:^{ if (weak

我有以下代码下载图像:

  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];
虽然我使用
\uu块typeof(self)
标识符将self传递到块中,但它仍然会被保留。我也试过
\uu弱MyClassName*bself=self并且它仍然进入保留周期。我好像错过了什么,有人能告诉我我到底做错了什么吗

仅供参考,
imageRequest
是my.m文件类别中的强iVar

提前谢谢。

试试看

__block __unsafe_unretained typeof (self) bself = self;
--编辑--

实际上解决了这个问题的评论

访问ivars时,请使用bself.property执行此操作。如果您直接访问IVAR,它将获得一个保留周期。

如此处所示


你把你的要求定得很高了吗@属性(非原子,强)ASIHTTPRequest*imageRequest;是的,iVar在默认情况下是强的,但我正在使用另一个请求作为强请求的弱引用,将其保留在内存中以进行进一步的操作,如取消。编译器报告一个错误:“类型‘typeof(self)’(又称‘MyClass*const u_; strong’)已经设置了保留属性”change typeof(self)MyClassName*已按您的建议更改。该类仍然进入一个保留周期。还有其他建议吗?你正在访问你所在街区的IVAR吗?是的,我有一些房产。imageData是一个强大的属性,magazineItem也是,contentImage也是。但是我是通过bself访问它们的,所以这会成为一个问题吗?谢谢你的回答,但是我的类仍然会因为某种原因被保留。
__weak __typeof__((__typeof__(self))self) bself = self