请查看以下代码。
XmlManipulatorObject=[[xmlManipulator alloc] init];
self.QuestionMutableArray=[[XmlManipulatorObject ReadXml] init];
self.dictionary=[[NSMutableDictionary alloc]init];
self.dictionary=[QuestionMutableArray objectAtIndex:reloader];
在我的dealloc方法中,我需要释放我正在使用的所有对象。应该是什么方式?
我试过以下但是有BAD_ACCESS:
-(void)deallocAll
{
[self.dictionary release];
[self.XmlManipulatorObject release];
[self.QuestionMutableArray release];
}
,属性如下:
@property(nonatomic,retain)NSMutableDictionary *dictionary;
@property(nonatomic,retain)NSMutableArray *QuestionMutableArray;
@property(nonatomic,retain)xmlManipulator *XmlManipulatorObject;
答案 0 :(得分:3)
好的,你有很多错误/坏主意发生在这里:
变量和方法名称应以小写字母开头。这有助于提高可读性并避免与类名混淆。所以XmlManipulatorObject应该是xmlManipulatorObject,ReadXml应该是readXml等。
创建类的实例时,您应该自动释放它或手动释放它。例如:
self.dictionary=[[[NSMutableDictionary alloc] init] autorelease];
或
NSMutableDictionary *myDic = [[NSMutableDictionary alloc]init];
self.dictionary=myDic;
[myDic release];
从上面看,您似乎也不知道属性处理保留和释放的方式。做一些关于属性的阅读。
答案 1 :(得分:2)
有时在完成使用它们之后立即释放对象要好得多,而不是在dealloc方法中。
此外,您应该使用默认的dealloc方法。
此外,由于你从未调用过dealloc super方法,所以你不会释放任何内存。
-(void)deallocAll
{
[self dealloc];
[self.dictionary release];
[self.XmlManipulatorObject release];
[self.QuestionMutableArray release];
}
我甚至会把这个从deallocAll更改为dealloc。
答案 2 :(得分:1)
如果您使用的是合成属性,请将变量设置为nil而不是释放它。
self.yourObject = nil;
这会将setter方法'nil'作为参数发送,你的对象将由setter方法释放。
答案 3 :(得分:0)
我不知道deallocAll的目的是什么。那是迄今为止我为这个案例学到的最好方法:
NSObject *ob = [[NSObject alloc] init];
self.myObject = ob;
[ob release];
在dealloc中
-(void)deallocAll{
[super dealloc];
[myObject release];
}