使用UIwebview时内存泄漏

时间:2009-11-10 14:34:03

标签: objective-c iphone cocoa-touch

我正处于我的第一个iphone sdk项目的最后阶段。我一直在努力消除我的应用程序中的内存泄漏,并且大部分成功了。但在那里,我正在与其中一个人挣扎。我有一个带有按钮的联系人屏幕,该按钮可以获取webview,但仅限于有网络连接。如果没有弹出警报。这在实践中运行良好,但是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 个答案:

答案 0 :(得分:1)

您是否清理过项目然后运行“Build& Analyze”?只要您使用Objective C样式函数,大部分时间都会告诉您大部分内存问题。如果你与C风格的功能混合搭配,它将没那么多帮助。

我猜测该行内的NSURLRequest是未发布的NSURLRequest。可能有助于提高可读性和可维护性以打破这一点。