2

我正在开发一个 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?

谢谢,

本·B。

4

2 回答 2

5

当您将对象添加到字典或数组等容器中时,将自动调用保留,并且当您将容器作为您的问题释放时,它是字典,它将调用每个对象的“释放”以释放对象的内存。

于 2010-02-21T08:53:48.150 回答
0

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

于 2010-01-18T19:45:43.443 回答