保留自动释放的对象会导致内存泄漏

时间:2013-03-19 12:18:48

标签: objective-c memory-management memory-leaks

我正在收集对变量

的回应
-(NSMutableDictionary *)getCombineIdAndNames{    

NSMutableDictionary *lObjCombineIdAndNamesArrayPtr = [[NSMutableDictionary alloc] init];

   [lObjCombineIdAndNamesArrayPtr setObject:lObjtempNamePtr 
                                       forKey:lObjtempIdPtr];
   return [lObjCombineIdAndNamesArrayPtr autorelease];
}

这导致内存泄漏

gObjAppDelegatePtr.m_cObjCombineIdNameDictPtr = [gObjAppDelegatePtr.m_cDbHandler getCombineIdAndNames];

gObjAppDelegatePtr.m_cObjCombineIdNameDictPtr。这是类型副本的属性。但它仍然给内存泄漏。如何解决它。请帮帮我。

1 个答案:

答案 0 :(得分:0)

getCombineIdAndNames完全没问题。你是alloc字典并在你返回之前自动释放它。没错。

这表明内存泄漏是由gObjAppDelegatePtr实例引起的。要么是它没有释放它的财产,要么整个物体都被泄露了。

顺便说一句,你可以在getCombineIdAndNames中改进的一件事是使用NSMutableDictionary的便利构造函数来完全避免所有的alloc / release调用。您还可以使用新的Obj-C容器语法:

-(NSMutableDictionary *)getCombineIdAndNames{    
    NSMutableDictionary *lObjCombineIdAndNamesArrayPtr = [NSMutableDictionary dictionary];
    lObjCombineIdAndNamesArrayPtr[lObjtempIdPtr] = lObjtempNamePtr;
    return lObjCombineIdAndNamesArrayPtr;
}