我的connectionDidFinishLoading类漏了怎么能解决这个问题?
@property (nonatomic,retain) NSMutableData *responseXMLData;
@property (nonatomic,copy) NSMutableData *lastLoadedResponseXMLData;
-(void)dealloc {
[responseXMLData release] ;
responseXMLData=nil;
[lastLoadedResponseXMLData release];
lastLoadedResponseXMLData=nil;
[super dealloc];
}
答案 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而不释放任何以前的副本?