Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用UIwebview时内存泄漏_Objective C_Iphone_Cocoa Touch - Fatal编程技术网

Objective c 使用UIwebview时内存泄漏

Objective c 使用UIwebview时内存泄漏,objective-c,iphone,cocoa-touch,Objective C,Iphone,Cocoa Touch,我正处于我的第一个iphonesdk项目的最后阶段。我一直在努力消除我的应用程序中的内存泄漏,并且大部分都成功了。但在那里,我正在与其中一个进行斗争。我有一个带有按钮的联系人屏幕,可以获取网络视图,但只有在有网络连接的情况下。如果没有,会弹出警报。这在实践中效果很好,但是l-e-a-k-s 所有泄漏都指向代码中的同一位置。这是第一个代码示例(instruments指向这些行中的第一行): 我想这意味着泄漏在函数内部的某个地方 下一个spot instruments点位于此示例中: //创建零地址

我正处于我的第一个iphonesdk项目的最后阶段。我一直在努力消除我的应用程序中的内存泄漏,并且大部分都成功了。但在那里,我正在与其中一个进行斗争。我有一个带有按钮的联系人屏幕,可以获取网络视图,但只有在有网络连接的情况下。如果没有,会弹出警报。这在实践中效果很好,但是l-e-a-k-s

所有泄漏都指向代码中的同一位置。这是第一个代码示例(instruments指向这些行中的第一行):

我想这意味着泄漏在函数内部的某个地方

下一个spot instruments点位于此示例中:

//创建零地址

- (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是一个没有被释放的请求。可能有助于提高可读性和可维护性,从而稍微打破这一界限。

谢谢您的建议!但是,我找不到“构建和分析”。这项功能似乎只有在Xcode 3.2中才有,据我推测,它只能安装在SnowLeopard上(我只有leopard)。但我会按照你的建议尝试拆分,然后从那里尝试!您仍然可以在Leopard上运行clang analyzer,它只是没有集成到Xcode UI中。有人很好地将其捆绑到应用程序中:
return ((isReachable && !needsConnection) || nonWiFi) ?