【问题标题】:Objective C: Memory Leak of Dictionary used in singleton目标 C:单例中使用的字典的内存泄漏
【发布时间】:2011-03-27 15:57:21
【问题描述】:

我正在使用单例类在我的 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 方法没有被调用而发生泄漏?

感谢您的帮助,

斯里坎特

【问题讨论】:

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


    【解决方案1】:

    添加自动释放:

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

    当您将一个对象分配给一个属性时,它会保留它,并且每当您调用和 init 方法时它都会保留它,从而将保留计数变为 2。

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

    self.dataList = newValue;
    

    @syntehsize 的属性会为您处理所有保留释放的内容。

    【讨论】:

    • self.dataList = [NSMutableDictionary dictionary];
    • 是的,这是正确的,因为 init 没有被调用它不会保留。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多