你需要释放它们 url5 和 xmlParser5 ,因为你已经使用它们分配 alloc 。
url5
xmlParser5
alloc
你也应该警惕打电话 release 在属性上,因为你创建的标准setter @synthesize 实例变量通常在设置新值之前释放变量的先前值。
release
@synthesize
这是非常混乱,作为一个清理一点的建议,尝试将一些内存管理的东西移动到访问器方法 - 你的代码充满了-release方法。即
代替:-
if([elementName isEqualToString:@"SearchClass"]) { [appDelegate.tempArray release]; appDelegate.tempArray = [[NSMutableArray alloc] init]; }
尝试:-
if([elementName isEqualToString:@"SearchClass"]) { appDelegate.tempArray = [NSMutableArray array]; }
哪里
appDelegate有一个方法
- (void)setTempArray:(NSMutableArray *)value { if(value!=tempArray){ [tempArray release]; tempArray = [value retain]; } }
或者你可以使用@synthesized访问器方法来自己保存编码。旁边的tempArray是一个实例变量的可怕名称。另请注意,每次创建新的tempArray时都会释放旧的tempArray - 最后一个实例何时清理?
这仍然不是很好,因为您的解析器类不应直接访问appDelegate中的实例变量。 Vardiables tempArray和searchClass应该是私有的,但这不是重点,而是更多的设计问题。
url5在哪里发布?
这该怎么办?
if(!currentElementValue){ [currentElementValue release]; }
释放currentElementValue如果它不存在?
[data2 release];
你保留了data2吗?
- (void) dealloc { [super dealloc]; [aSearchClass release]; [currentElementValue release]; //[self release]; }
我认为aSearchClass是appDelegate上的一个实例变量?
这可能听起来像挑剔,但如果让你的代码清楚并且你确切地知道发生了什么,那么追踪泄漏就容易得多。