iPhone SDK:分配属性值时内存泄漏?

时间:2011-08-10 18:56:46

标签: iphone ios ios4

我的connectionDidFinishLoading类漏了怎么能解决这个问题?

enter image description here

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

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

3 个答案:

答案 0 :(得分:1)

您没有告诉我们您在哪里为responseXMLData创建对象?在哪里初始化该对象应该释放

self.responseXMLData = [[NSMutuableData alloc]init]autorelease];

并且在你的dealloc方法中你可以说

-(void)dealloc {

    self.responseXMLData = nil; //which is equivalent to [responseXMLData release]; responseXMLData=nil;
}

答案 1 :(得分:1)

@property (nonatomic,copy) NSMutableData *lastLoadedResponseXMLData;

由于您正在使用您将要设置和更改的可变对象,因此您应该使用RETAIN:

@property (nonatomic,retain) NSMutableData *lastLoadedResponseXMLData;

retain - “指定在赋值时应该在对象上调用retain。...之前的值会发送一条释放消息。”所以你可以想象分配一个NSString实例(它是一个对象,你可能想要保留它)。

copy - “指定应该使用对象的副本进行分配。...先前的值会发送一条释放消息。”基本上与保留相同,但发送-copy而不是-retain。

以下是您可以指示@ property / @ synthesize为您创建的各种get / set方法的一些好读物:http://cocoawithlove.com/2010/06/assign-retain-copy-pitfalls-in-obj-c.html

答案 2 :(得分:0)

只是想一想,在你的:

self.lastLoadedResponseXMLData = nil;
self.lastLoadedResponseXMLData = self.responseXMLData;

在dealloc发布一个版本之前,是否有可能将你刚设置为nil并将nextXXData复制到lastLoadedResponseXMLData而不释放任何以前的副本?