Утечка памяти при использовании UIwebview - PullRequest
0 голосов
/ 10 ноября 2009

Я нахожусь на финальной стадии моего первого проекта iphone SDK. Я работаю трудно удалить утечки памяти из моего приложения, и в основном преуспел в этом. Но там я борюсь с одним из них. У меня есть экран контактов с кнопкой, которая выбирает веб-просмотр, но только при наличии сетевого подключения. Если не появляется предупреждение. Это прекрасно работает на практике, но l-e-a-k-s.

Все утечки указывают на одно и то же место в коде. Вот первый пример кода (инструменты указывают на первую из этих строк):

BOOL nett=[self connectedToNetwork];
if (!nett)
{
    errorView=[[UIAlertView alloc] initWithTitle:@"Netverksfeil" message:@"Nettet er nede" delegate:self 
                               cancelButtonTitle:@"Filler´n!"   otherButtonTitles:nil];
    [errorView show];
    [errorView release];
}
else{
    iCodeBrowserViewController *browserView=[[iCodeBrowserViewController alloc]initWithNibName:@"iCodeBrowserViewController" bundle:[NSBundle mainBundle]];
    [[self navigationController] pushViewController:browserView animated:YES];
    [browserView release];
}

Полагаю, это означает, что утечка находится где-то внутри этой функции ...

Следующие спотовые инструменты, на которые указывает инструмент, находятся в этом примере:

// Создать ноль адди

- (BOOL) connectedToNetwork{  struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;

// Recover reachability flags
SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
SCNetworkReachabilityFlags flags;

BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
CFRelease(defaultRouteReachability);

if (!didRetrieveFlags)
{
    printf("Error. Could not recover network reachability flags\n");
    return 0;
}

BOOL isReachable = flags & kSCNetworkFlagsReachable;
BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
BOOL nonWiFi = flags & kSCNetworkReachabilityFlagsTransientConnection;

return ((isReachable && !needsConnection) || nonWiFi) ? 
(([[[NSURLConnection alloc] initWithRequest:[NSURLRequest 
                                            requestWithURL: [NSURL URLWithString:@"http://www.apple.com/"] 
                                            cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:20.0] 
                                  delegate:self]autorelease]) ? YES : NO) : NO;}

Эта строка будет конкретной:

return ((isReachable && !needsConnection) || nonWiFi) ?

Кто-нибудь из вас может видеть, что просачивается в этот код? Я скопировал эту часть откуда-то еще, и мне удалось немного изменить ее. Но я должен признать, что не понимаю весь код этой функции ...

1 Ответ

1 голос
/ 10 ноября 2009

Вы очистили проект и запустили "Build & Analyze"? В большинстве случаев это будет рассказывать вам о большинстве проблем с памятью, если вы используете функции стиля Objective C. Если вы будете смешивать и сочетать с функциями стиля C. Это не будет такой большой помощью.

Полагаю, что NSURLRequest внутри этой строки не выпускается. Может помочь читабельность и ремонтопригодность, чтобы немного разбить эту строку.

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