2012-06-13 91 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