2009-11-10 357 views
0

我在第一個iphone sdk項目的最後階段。我一直在努力從我的應用程序中刪除內存泄漏,並且大部分都成功了。但是我在那裏掙扎着。我有一個聯繫人屏幕,其中包含一個提取網頁視圖的按鈕,但只有在有網絡連接的情況下。如果沒有警報彈出。這在實踐中運行良好,但是l-e-a-k-s。使用UIwebview時發生內存泄漏

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

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

您是否清理了該項目,然後運行「Build & Analyze」?大多數情況下,只要您使用Objective C風格函數,就會告訴您有關內存問題的大部分內容。如果你與C風格的功能混合搭配,它不會有太大的幫助。

我猜那個行內的NSURLRequest是沒有被釋放的。可能幫助可讀性和可維護性打破這一線。

+0

感謝您的諮詢!但是,我無法找到「構建和分析」。看來這個功能只是在Xcode 3.2中,而我收集的,只能安裝在雪豹(我只有豹)。 但我會嘗試按照你的建議拆分它,並從那裏嘗試! – Ezop 2009-11-11 18:17:56

+0

我有XCode 3.1.4,順便說一句... – Ezop 2009-11-11 19:26:55

+0

你是對的,它只是在Xcode 3.2或更高版本。 – 2009-11-11 21:04:55

相關問題