Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.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
iphonesdk:如何修复这个漏洞?_Iphone_Ios_Ios4 - Fatal编程技术网

iphonesdk:如何修复这个漏洞?

iphonesdk:如何修复这个漏洞?,iphone,ios,ios4,Iphone,Ios,Ios4,可能重复: 这个问题与上一个问题不同,即使是在同一个班级, 我有一个泄漏,如下所示 @property (nonatomic,retain) NSMutableData *responseXMLData; @property (nonatomic,copy) NSMutableData *lastLoadedResponseXMLData; -(void)dealloc { [doc release]; doc=nil; [xmlBodyTemp release]; [responseXML

可能重复:

这个问题与上一个问题不同,即使是在同一个班级,

我有一个泄漏,如下所示

@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];
}

第二个问题:在上面我写的变量中:

self.responseXMLData = [self.lastLoadedResponseXMLData copy];

我是否需要比在dellaoc中释放self.lastLoadedResponseXMLData多一次?还是只有德洛克是埃诺?自动释放似乎有效,但我不明白为什么我强烈建议您通读苹果提供的。这将使您更好地了解如何更好地管理分配

--

依我看(不确定其他人是否会同意),在dealloc中,您需要做的就是发布您的对象。没有必要将它们设置为零

您需要释放正在复制的对象。当您复制某物时,保留计数将增加1。然后,当您将其分配给
self.responseXMLData
时,retain计数再次增加1(因为该属性执行retain操作)。在这里最好的办法是自动释放它<代码>[[self.lastloadeResponseXmlData copy]自动删除]


[1]最简单的经验法则是,任何时候你
alloc
copy
new
、或
保留某件东西,你都拥有它,并且你有责任在你拥有它的范围内发布它。

请不要回答同样的问题:。而是更新你原来的问题,评论答案,或者只是等待一个更好的答案。一段时间后,如果你还没有满意的答案,你可以考虑放置一个赏金。@ PengOne,你看不到主泄漏问题,屏幕截图在这里是完全不同的吗?或者你只是在愚弄某人?鉴于问题的标题完全相同,代码非常相似,我并不奇怪人们会投反对票并以重复的方式结束投票。@XDeveloper我认为你不应该这么粗鲁-你创建了一个包含两个问题的问题,您对泄漏的描述与上次完全相同-只有屏幕不同。@VMAtm如果您需要友好,您可以要求我编辑我的问题,包括一个问题并更改标题,而不是投票和结束,它在这里创建了一个垃圾是的,autorelase确实工作并解决了一个漏洞,但是如果dellaoc是enough,为什么我要这样做?主要问题是什么?在这种情况下,dealloc是不够的,因为您有一个被过度保留的对象。如果不在复制的作用域中释放[self.lastLoadedResponseXMLData copy],则最终的保留计数为2,并且虽然在dealoc方法中释放它是正确的,但只释放一次,这意味着仍然有一个引用挂起。正确的方法是自动释放副本,然后释放属性在dealloc方法中保留的引用。