【问题标题】:Though I follow _Block , Memory Leak Happening @ ASIHTTPRequest虽然我关注 _Block ,但内存泄漏发生@ASIHTTPRequest
【发布时间】:2013-07-04 12:16:34
【问题描述】:

这是我的代码,你能帮我在哪里处理内存吗?我正在使用 X-Code 4.6。而且我还检查了仪器,以获取其他内存泄漏。它几乎显示了所有“ASIHTTPRequest”。我没有像 [request release] 那样手动处理;有必要修复内存泄漏吗?提前致谢

       __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
        [request setCompletionBlock:^{
                       }];
        [request setFailedBlock:^{

        }];
        [request setTimeOutSeconds:60];
        [request startAsynchronous];

【问题讨论】:

  • 你在使用 ARC 吗?为什么 __block 标识符?我没有看到你在块内使用request 变量??
  • NSString *responseString = [请求响应字符串];我正在使用它。是的,我正在使用 ARC。
  • 我关注stackoverflow.com/questions/7736145/…。帮助我到底出了什么问题?我在可变数组中也有泄漏:(

标签: ios objective-c memory-leaks


【解决方案1】:

由于块和请求对象之间创建的保留循环而泄漏。

试试下面的:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
__weak ASIHTTPRequest *weakRequest = request;
[request setCompletionBlock:^{
                   }];
[request setFailedBlock:^{

}];
[request setTimeOutSeconds:60];
[request startAsynchronous];

干杯..

编辑:

ASIHTTPRequest 不再是not supported,尝试移动到AFNetworking,这样最好。

【讨论】:

  • 对某些人来说可能很明显,但您可能想指出,在每个块中,您应该使用weakRequest,而不是request
  • +1 哇! Super Its Fixed :) 我在所有请求位置都使用了“weakRequest”。谢谢塔雷克
  • 专业提示:您可以像这样使用__typeof()__weak __typeof(request) weakRequest = request;,而不是到处重复类型名称。当然也适用于self
  • 从开源库中学习是一个好方法。 github.com/AFNetworking/AFNetworking/blob/…
  • 谢谢大家。我会试试这个。
【解决方案2】:

然后改为这样做:

    __weak __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    [request setCompletionBlock:^{
        __strong ASIHTTPRequest *requestInBlock = request;
        //your code, and replace all refrences of request inside the block with requestInBlock.
    }];
    [request setFailedBlock:^{
        //same here
    }];
    [request setTimeOutSeconds:60];
    [request startAsynchronous];

试试这个。

【讨论】:

  • 这可能会在发布代码中失败(经过优化),因为在第一条语句之后可能没有对请求对象的强引用。 @Tarek 拥有一个本地强引用和一个单独的弱引用的技术将在优化后继续存在。
猜你喜欢
  • 2012-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 1970-01-01
  • 2011-02-09
  • 2016-11-03
  • 1970-01-01
相关资源
最近更新 更多