【问题标题】:How can I release 'request' in my project that using ARC?如何在使用 ARC 的项目中发布“请求”?
【发布时间】:2012-04-23 01:35:41
【问题描述】:

作为 iOS 开发者的初学者。我在我的项目中使用 ARC。我什至使用 ASIHttpRequest 来简化一些工作。如您所知,ASIHttpRequest 不支持 ARC。我添加了 -fno-objc-arc 编译器标志以使其工作。 现在,这是我的问题。如果我的一些代码是这样的,我该如何释放“请求”对象:

NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
   __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
   [request setCompletionBlock:^{
      NSData *responseData = [request responseData];
   }];
   [request setFailedBlock:^{
      NSError *error = [request error];
   }];
   [request startAsynchronous];

【问题讨论】:

  • 使用 ARC 意味着你不用担心发布它。
  • 而且,没有'alloc',所以即使在非ARC环境下也不需要释放...

标签: ios asihttprequest automatic-ref-counting


【解决方案1】:

我的理解是编译器在混合 ARC 和非 ARC 代码时使用 NSObjects 做正确的事情。

根据 Cocoa 方法的命名约定,responseData 应该是一个非拥有引用。因此,您不应该负责保留/释放它。请求对象拥有它。

【讨论】:

    【解决方案2】:

    没有必要发布这个“请求”,因为这些代码在使用 ARC 的文件中。编译器将帮助您插入发布方法。但是对于 ASIHTTPRequest.m 文件中的对象,你需要释放它们(实际上你不需要这样做),因为你已经添加了 -fno-objc-arc 编译器标志,并且编译器不会为你插入释放方法。

    【讨论】:

      猜你喜欢
      • 2012-09-17
      • 2020-10-30
      • 2016-10-18
      • 2011-06-07
      • 1970-01-01
      • 2012-12-11
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      相关资源
      最近更新 更多