何时释放添加到NSMutableDictionary的对象

时间:2010-01-18 19:41:57

标签: iphone arrays memory-leaks dictionary iphone-sdk-3.1

我正在开发一个iPhone应用程序,它将在运行时构造一个NSMutableDictionary,其值(键值对)将是NSMutableArrays。对于Objective-C有点新,我担心以下内容会导致内存泄漏:

- (void) addNewSupplierPhoto:(UIImage*)image toSupplierID:(NSInteger*) supplierID{
NSMutableArray* supplierPhotoArray = [supplierPhotos objectForKey:supplierID];
if(supplierPhotoArray == nil)
{
    supplierPhotoArray = [[NSMutableArray alloc] init];
    [supplierPhotos setObject:supplierPhotoArray forKey:supplierID];
    [supplierPhotoArray release];
}
}

supplierPhotos是一个NSMutableDictionary,它是包含类的成员变量。

正如您所看到的,当我接受新的UIImage *放入结构时,我首先检查对应于第二个参数(supplierID)的键值对的对象是否为nil。如果它是nil,我分配一个新的NSMutableArray并将其设置为该键的对象,然后释放它。假设我在包含此方法的类的dealloc中释放NSMutableDictionary,是否会释放引用?在释放NSMutableDictionary之前,我是否需要运行它并释放包含在其中的各个NSMutableArrays?

谢谢,

Ben B。

2 个答案:

答案 0 :(得分:5)

当您将对象添加到容器(如字典或数组)中时,将自动调用retain,当您将容器作为问题释放容器时,它会调用每个对象的“释放”以释放对象的内存。

答案 1 :(得分:0)

这种内存管理对我来说是正确的。您释放了已分配的一个副本,并且一旦添加到该数组,该数组将保留另一个引用,因此净计数为1是正确的。