2012-06-13 92 views
0

我从servin.com网站获得了以下代码。尽管代码有效,但Instruments报告了内存泄漏。我没有看到任何分配,保留,复制代码,所以我不知道如何解决这个内存泄漏。仪器的结果代码&如下。任何帮助,将不胜感激。从仪器如何解决这个内存泄漏?

// 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字节 - 系统配置 - SCNetworkReachabilityCreateWithAddress

回答

2

泄漏在那里。在所有代码之后,您应该释放对target的引用。从苹果公司的上SCNetworkReachabilityCreateWithAddress文档:

返回值

一个新的不可改变的可达性的参考。您必须释放返回的值。

尝试使用CFRelease(target)函数来消除呼叫。如果你需要引用在函数调用之间坚持 - 在你的类中使它成为一个实例变量。

+0

修好了!非常感谢。 – Dev1345