iPhone SDK:我该如何解决这个漏洞?

Spr*_*ing -2 iphone ios4 ios

我有一个leakege在这里,但无法找到问题;

@property (nonatomic,retain) NSMutableData *responseXMLData;
@property (nonatomic,copy) NSMutableData *lastLoadedResponseXMLData;
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

-(void)dealloc {
    [doc release];
    doc=nil;
    [xmlBodyTemp release];
    [responseXMLData release] ;
    responseXMLData=nil;
    [lastLoadedResponseXMLData release];
    lastLoadedResponseXMLData=nil;
    [xmlBody release];
    [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

Ano*_*mie 5

如果没有看到您的dealloc方法,我们无法确定您是否正确地释放了这些属性的值.

但在发布的代码中,我确实看到了一个主要问题.但这不是你想的地方.

self.lastLoadedResponseXMLData = docTempData;
Run Code Online (Sandbox Code Playgroud)

这行虽然被XCode标记,但很好(假设您正确地释放了值dealloc).

self.responseXMLData = [self.lastLoadedResponseXMLData copy];
Run Code Online (Sandbox Code Playgroud)

然而,这条线并不好.它会复制任何值,self.lastLoadedResponseXMLData但您永远不会因复制而释放引用.self.responseXMLData,因为它被声明为"retain",添加它自己对该对象的引用,并且(假设你正确地释放了值dealloc)这个引用是清理过的.

如果你真的不需要关心对象是否相同或是副本,只需放弃副本.否则,自动释放它:

self.responseXMLData = [[self.lastLoadedResponseXMLData copy] autorelease];
Run Code Online (Sandbox Code Playgroud)