看不出为什么这里有内存泄漏

时间:2010-08-18 13:00:21

标签: iphone objective-c cocoa cocoa-touch memory

我有以下块在性能工具中给我带来问题:特别是它说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吗?

4 个答案:

答案 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;我认为应该是它..