0

我正在将响应收集到变量中

-(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. 这是副本类型的属性。但它仍然会导致内存泄漏。如何解决它。请帮助我。

4

1 回答 1

0

getCombineIdAndNames完全没问题。您正在alloc阅读字典并在返回之前自动释放它。那里没有错。

这向我表明内存泄漏是由gObjAppDelegatePtr实例引起的。要么它没有释放它的属性,要么整个对象都被泄露了。

顺便说一句,您可以改进的一件事getCombineIdAndNames是使用方便的构造函数 NSMutableDictionary来完全避免所有分配/释放调用。您还可以使用新的 Obj-C 容器语法:

-(NSMutableDictionary *)getCombineIdAndNames{    
    NSMutableDictionary *lObjCombineIdAndNamesArrayPtr = [NSMutableDictionary dictionary];
    lObjCombineIdAndNamesArrayPtr[lObjtempIdPtr] = lObjtempNamePtr;
    return lObjCombineIdAndNamesArrayPtr;
}
于 2013-03-19T12:36:59.960 回答