Iphone 使用可达性的大内存泄漏
通过使用设备上的仪器,它在我的应用程序中使用苹果的可达性2.0代码检测到3.50KB的内存泄漏。泄漏的对象是GeneralBlock-3584。泄漏工具指向以下代码:Iphone 使用可达性的大内存泄漏,iphone,xcode,memory,memory-leaks,reachability,Iphone,Xcode,Memory,Memory Leaks,Reachability,通过使用设备上的仪器,它在我的应用程序中使用苹果的可达性2.0代码检测到3.50KB的内存泄漏。泄漏的对象是GeneralBlock-3584。泄漏工具指向以下代码: - (BOOL) startNotifer { BOOL retVal = NO; SCNetworkReachabilityContext context = {0, self, NULL, NULL, NULL}; if(SCNetworkReachabilitySetCallback(reach
- (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;
}
我基本上是直接使用苹果示例代码中的可达性示例,因此我不知道为什么会发生这种情况,也不知道如何解决它。尝试用NSAutoReleasePool包装您的可达性对象。如果它仍然存在,试着用自动释放池缩小泄漏。我认为这是一个类似的问题。 实际上,这似乎是CFNetwork中的一个Bug,它取决于操作系统,
因此,没有解决办法。苹果必须修复它。
通用Block-3584
根据苹果官方在开发者论坛上的声明(请检查,注意你的NDA),泄漏不是真正的泄漏,事实上是仪器中的错误。为什么?除非你有自己的分支,否则会有一个NSAutoReleasePool。把它包起来也没用。