如何解决这个内存泄漏?

时间:2012-06-13 18:35:43

标签: xcode memory-leaks instruments reachability

我从servin.com网站获得了以下代码。尽管代码有效,但仪器报告内存泄漏。我没有在代码中看到任何alloc,retain,copy,所以我无法弄清楚如何解决这个内存泄漏问题。代码&仪器的结果如下。任何帮助,将不胜感激。

// Part 1 - Create Internet socket addr of zero
struct sockaddr_in zeroAddr;
bzero(&zeroAddr, sizeof(zeroAddr));
zeroAddr.sin_len = sizeof(zeroAddr);
zeroAddr.sin_family = AF_INET;

// Part 2- Create target in format need by SCNetwork
SCNetworkReachabilityRef target = 
SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *) &zeroAddr);

// Part 3 - Get the flags
SCNetworkReachabilityFlags flags;
SCNetworkReachabilityGetFlags(target, &flags);

// Part 4 - Create output
NSString *sNetworkReachable;
if (flags & kSCNetworkFlagsReachable)
    sNetworkReachable = @"YES";
else
    sNetworkReachable = @"NO";

NSString *sCellNetwork;
if (flags & kSCNetworkReachabilityFlagsIsWWAN)
    sCellNetwork = @"YES";
else
    sCellNetwork = @"NO";


NSLog (@"Network Reachable: %@", sNetworkReachable);
NSLog (@"Cell Network: %@", sCellNetwork);

乐器的结果......

泄露的对象 - # - 地址 - 大小 - 负责任的图书馆 - 负责任的框架

Malloc 16字节 - 1 - 0x5141d50 - 16字节 - SystemConfiguration - SCNetworkReachabilityCreateWithAddress

SCNetworkReachability - 1 - 0x51347b0 - 288字节 - SystemConfiguration - SCNetworkReachabilityCreateWithAddress

2 个答案:

答案 0 :(得分:2)

泄漏就在那里。在完成所有代码之后,您应该释放对target的引用。来自关于SCNetworkReachabilityCreateWithAddress的Apple文档:

  

返回值

     

新的不可变可达性引用。您必须释放返回的值。

尝试使用CFRelease(target)功能取消呼叫。如果需要在函数调用之间保持引用 - 请将它作为类中的实例变量。

答案 1 :(得分:0)

如果您阅读SCNetworkReachabilityCreateWithAddresss

的文档
  

返回值

     

新的不可变可达性引用。您必须释放返回的   值。