2009-11-10 111 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

相关问题