【问题标题】:Large Memory Leak Using Reachability使用可达性的大内存泄漏
【发布时间】:2011-03-04 13:10:04
【问题描述】:

在设备上使用 Instruments,它在我的应用中使用 Apple 的 Reachability 2.0 代码检测到 3.50 KB 内存泄漏。泄露的对象是 GeneralBlock-3584。泄漏工具指向以下代码:

- (BOOL) startNotifer
{
    BOOL retVal = NO;
    SCNetworkReachabilityContext    context = {0, self, NULL, NULL, NULL};
    if(SCNetworkReachabilitySetCallback(reachabilityRef, ReachabilityCallback, &context))
    {
        // THIS IS LINE OF CODE WHERE THE LEAK OCCURS:
        if(SCNetworkReachabilityScheduleWithRunLoop(reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode))
        {
            retVal = YES;
        }
    }
    return retVal;
}

我几乎直接使用 Apple 示例代码中的 Reachability 示例,所以我无法弄清楚为什么会发生这种情况或如何解决它。

【问题讨论】:

    标签: iphone xcode memory memory-leaks reachability


    【解决方案1】:

    GeneralBlock-3584 泄漏是,根据 Apple 在开发者论坛上的官方声明(检查 http://devforums.apple.com,并注意您的 NDA),不是真正的泄漏,实际上是 Instruments 中的错误。

    【讨论】:

      【解决方案2】:

      尝试使用 NSAutoReleasePool 包装您的 Reachability 对象。如果它仍然存在,请尝试使用自动释放池缩小泄漏范围。

      【讨论】:

      • 为什么?除非你有自己的线程,否则周围有一个 NSAutoReleasePool。包装它没有帮助。
      【解决方案3】:

      我认为这是与question 类似的问题。 实际上,它似乎是 CFNetwork 中的一个错误,它取决于操作系统, 所以没有解决方法。苹果必须修复它。

      【讨论】:

        猜你喜欢
        • 2014-01-06
        • 2015-08-10
        • 1970-01-01
        • 2013-05-15
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多