目标C:单例中使用的字典的内存泄漏

时间:2010-08-10 06:11:49

标签: iphone objective-c memory-leaks nsdictionary singleton

我正在使用单例类在我的iphone应用中的视图之间共享数据。我的单例类包含一个我在-init方法中分配的字典:

- (id)init
{        
   if ( self = [super init] )    
    {
            self.dataList = [[NSMutableDictionary alloc]init];

    }

    return self;
}

我在dealloc方法中发布它:

- (void)dealloc
{   
    [dataList release];

    [super dealloc];
}

这个dataList是从服务器下载的,我在我的应用程序中多次这样做,所以我有一个自定义的setter方法来释放旧的,并保留新的:

-(void) setDataList:(NSMutableDictionary*)d    
{
    if( dataList !=nil){

    [dataList release];
    dataList = [d retain];

else 
   dataList = [d retain];
}

使用泄漏工具,我收到了字典的内存泄漏。我认为我正在正确地进行字典的分配和释放。因为单例的dealloc方法没有被调用,所以会发生泄漏吗?

感谢您的帮助,

SRIKANTH

1 个答案:

答案 0 :(得分:3)

添加自动释放:

self.dataList = [[[NSMutableDictionary alloc] init] autorelease];

当你将一个对象分配给一个属性时,它会保留它,每当你调用它时,它保留的init方法,保留计数为2。

当你重新分配它时它也会释放,所以你可以

self.dataList = newValue;

@ syntehsize'd属性为您处理所有保留发布内容。