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

时间:2011-08-10 17:21:24

标签: iphone ios ios4

我这里有泄漏,但找不到问题;

@property (nonatomic,retain) NSMutableData *responseXMLData;
@property (nonatomic,copy) NSMutableData *lastLoadedResponseXMLData;

enter image description here

-(void)dealloc {
    [doc release];
    doc=nil;
    [xmlBodyTemp release];
    [responseXMLData release] ;
    responseXMLData=nil;
    [lastLoadedResponseXMLData release];
    lastLoadedResponseXMLData=nil;
    [xmlBody release];
    [super dealloc];
}

1 个答案:

答案 0 :(得分:5)

如果没有看到dealloc方法,我们无法确定您是否正确发布了这些属性的值。

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

self.lastLoadedResponseXMLData = docTempData;

这一行虽然被XCode标记,但很好(假设您在dealloc中正确发布了值)。

self.responseXMLData = [self.lastLoadedResponseXMLData copy];

然而,这条线并不好。它会复制self.lastLoadedResponseXMLData中的任何值,但由于副本,您永远不会释放引用。 self.responseXMLData,因为它被声明为“retain”,添加了自己对该对象的引用,并且(假设您在dealloc中正确释放了值)此引用是清理过的。

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

self.responseXMLData = [[self.lastLoadedResponseXMLData copy] autorelease];