2012-06-13 4 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); 

Результаты инструментов ...

просочились Object - # - Адрес - Размер - Ответственная библиотека - Ответственные кадры

таНос 16 Б - 1 - 0x5141d50 - 16 Bytes - SystemConfiguration - SCNetworkReachabilityCreateWithAddress

SCNetworkReachability - 1 - 0x51347b0 - 288 Bytes - SystemConfiguration - SCNetworkReachabilityCreateWithAddress

ответ

0

Если вы читаете документацию SCNetworkReachabilityCreateWithAddresss

Возвращаемое значение

Новой неизменен эталонной достижимость. Вы должны освободить возвращаемое значение .

2

Утечка там. После всего кода вы должны отпустить ссылку на target. Из документации яблока на SCNetworkReachabilityCreateWithAddress:

Возвращаемого значение

Новой неизменная ссылка достижимости. Вы должны освободить возвращаемое значение.

Попробуйте использовать функцию CFRelease(target) для устранения вызова. Если вам нужна ссылка для продолжения между вызовами функций - сделайте это переменной экземпляра в своем классе.

+0

Это исправлено! Огромное спасибо. – Dev1345

Смежные вопросы