使用可达性的大内存泄漏

时间:2010-06-16 15:41:33

标签: iphone xcode memory memory-leaks reachability

在设备上使用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示例,因此我无法弄清楚为什么会发生这种情况或我如何修复它。

3 个答案:

答案 0 :(得分:6)

根据开发人员论坛上的官方Apple声明(检查http://devforums.apple.com,并注意你的NDA),不是真正的泄漏,实际上是一个bug,

GeneralBlock-3584泄漏了在仪器中。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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