簡體   English   中英

使用UIwebview時發生內存泄漏

[英]Memory leak when using UIwebview

我正處於我的第一個iPhone SDK項目的最后階段。 我一直在努力消除應用程序中的內存泄漏,並且大多數情況下都成功了。 但是我在其中之一中掙扎。 我有一個帶按鈕的聯系人屏幕,該按鈕可獲取Web視圖,但僅當存在網絡連接時才可以。 如果不是,則會彈出警報。 這在實踐中效果很好,但會泄漏。

所有泄漏均指向代碼中的同一位置。 這是第一個代碼示例(指令指向這些行的第一行):

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) ?

你們中的任何人都可以看到此代碼中泄漏的內容嗎? 我已經從其他地方復制了此部分,並設法對其進行了一些改動。 但是我必須承認我不理解該功能中的所有代碼...

您是否清理過項目,然后運行“構建和分析”? 只要您一直在使用Objective C樣式函數,大多數時候它都會告訴您大多數內存問題。 如果您與C樣式函數混合搭配,將不會有太多幫助。

我猜想那行里面的NSURLRequest是不會被釋放的。 可能會有助於提高可讀性和可維護性,以使該組合更容易些。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM