Iphone 目标C:单亲家庭使用的词典内存泄漏

Iphone 目标C:单亲家庭使用的词典内存泄漏,iphone,objective-c,memory-leaks,nsdictionary,singleton,Iphone,Objective C,Memory Leaks,Nsdictionary,Singleton,我正在使用一个singleton类在iphone应用程序中的视图之间共享数据。我的singleton类包含我在My-init方法中分配的字典: - (id)init { if ( self = [super init] ) { self.dataList = [[NSMutableDictionary alloc]init]; } return self; } 我用我的dealloc方法发布它: - (void)

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

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

    }

    return self;
}
我用我的dealloc方法发布它:

- (void)dealloc
{   
    [dataList release];

    [super dealloc];
}
此数据列表是从服务器下载的,我在我的应用程序中多次这样做,因此我有一个自定义setter方法来释放旧数据列表,并保留新数据列表:

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

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

else 
   dataList = [d retain];
}
在使用泄漏工具时,我发现字典内存泄漏。我认为我正确地完成了字典的alloc和release。泄漏是因为没有调用singleton的dealloc方法吗

谢谢你的帮助

Srikanth添加自动释放:

self.dataList = [[[NSMutableDictionary alloc] init] autorelease];
当您将对象指定给属性时,它会保留该对象,并且无论何时调用它所保留的和init方法,都会将保留计数设置为2

当您重新分配它时,它也会释放,这样您就可以

self.dataList = newValue;

@syntehsized属性为您处理所有的retain-release内容。

self.dataList=[NSMutableDictionary]是的,这是正确的,因为没有调用init,它不会保留。