SCNetworkReachabilityRef Leak на xcode - PullRequest
       1

SCNetworkReachabilityRef Leak на xcode

1 голос
/ 24 августа 2011

У меня есть утечка с этими вар, и я не знаю, как ее решить ...

Вот код:

bool success = false;
    const char *host_name = [@"www.google.com" cStringUsingEncoding:NSASCIIStringEncoding];
    SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host_name);
    SCNetworkReachabilityFlags flags;
    success = SCNetworkReachabilityGetFlags(reachability, &flags);
    bool isAvailable = success && (flags & kSCNetworkFlagsReachable) && 
    !(flags & kSCNetworkFlagsConnectionRequired);
    if (isAvailable) {
        ...
    }else{
        ...
    }
    CFRelease(reachability);

Утечки: 90,5% для линии

SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host_name);

и 9,5% для этой строки:

success = SCNetworkReachabilityGetFlags(reachability, &flags);

Вот и все. Так что, если вы можете мне помочь, это может быть очень приятно: D Спасибо

1 Ответ

5 голосов
/ 24 августа 2011

Вы на самом деле не протекаете. Заметьте, как очевидная утечка происходит только при первом вызове в API? Это просто фоновая настройка, которую можно игнорировать.

Однако при работе с Core Foundation и совместимыми типами вы должны проверить наличие NULL возвращаемых значений. Если вы передадите NULL на CFRelease(), ваше приложение упадет. Таким образом, вы должны сделать это:

bool success = false;
const char *host_name = [@"www.google.com" cStringUsingEncoding:NSASCIIStringEncoding];
SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host_name);
if (reachability) {
    SCNetworkReachabilityFlags flags;
    success = SCNetworkReachabilityGetFlags(reachability, &flags);
    bool isAvailable = success && (flags & kSCNetworkFlagsReachable) && 
    !(flags & kSCNetworkFlagsConnectionRequired);
    if (isAvailable) {
        ...
    }else{
        ...
    }
    CFRelease(reachability);
}

Обратите внимание на добавленный оператор if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...