我有以下块在性能工具中给我带来问题:特别是它说STObject正在泄漏。我不确定为什么?
for (NSDictionary *message in messages)
{
STObject *mySTObject = [[STObject alloc] init];
mySTObject.stID = [message valueForKey:@"id"];
[items addObject:mySTObject];
[mySTObject release]; mySTObject = nil;
}
[receivedData release]; receivedData=nil;
[conn release]; conn=nil;
更新:
项是@property(非原子,保留)这会导致保留计数为+2吗?
答案 0 :(得分:6)
如果你保留了NSArray或NSDictionary的内容,你的mySTObject会被保留,这意味着当你执行时它仍然存在 - 释放然后将其设置为nil。从保留它的存储中删除对象,并且“泄漏”消失。
答案 1 :(得分:4)
您是否在STObject中存储了一些变量/属性?如果这样做,您将需要在STObject的“ - (void)dealloc”方法中释放它们。否则,虽然释放了STObject,但STObject拥有的变量不会被释放。
dealloc方法的一个例子是:
- (void)dealloc {
[stID release];
[myVar2 release];
[myVar3 release];
[super dealloc];
}
还要确保在方法结束时调用[super dealloc]。
答案 2 :(得分:0)
如果您使用的是10.6,Xcode有“构建和分析”,我发现这是调试内存泄漏的一个非常好的工具。文档可用here
答案 3 :(得分:-4)
释放后,你将mySTObject设置为nil ......
[mySTObject release]; mySTObject = nil;
删除mySTObject = nil;
我认为应该是它..