iPhone SDK:我该如何解决这个漏洞?
我有一个leakege在这里,但无法找到问题;
@property (nonatomic,retain) NSMutableData *responseXMLData; @property (nonatomic,copy) NSMutableData *lastLoadedResponseXMLData;
-(void)dealloc { [doc release]; doc=nil; [xmlBodyTemp release]; [responseXMLData release] ; responseXMLData=nil; [lastLoadedResponseXMLData release]; lastLoadedResponseXMLData=nil; [xmlBody release]; [super dealloc]; }
如果没有看到dealloc
方法,我们无法确定您是否正确地释放了这些属性的值。
但在发布的代码中,我确实看到了一个主要问题。 但这不是你想的地方。
self.lastLoadedResponseXMLData = docTempData;
这行虽然被XCode标记,但很好(假设您在dealloc
正确释放了值)。
self.responseXMLData = [self.lastLoadedResponseXMLData copy];
然而,这条线并不好。 它复制了self.lastLoadedResponseXMLData
的任何值,但由于复制,您永远不会释放引用。 self.responseXMLData
,因为它被声明为“retain”,它将自己的引用添加到对象中,并且(假设你在dealloc
正确释放了值)这个引用是清理过的。
如果您真的不需要关心对象是否相同或是副本,只需放弃副本。 否则,自动释放它:
self.responseXMLData = [[self.lastLoadedResponseXMLData copy] autorelease];