Iphone 何时释放添加到NSMutableDictionary的对象

Iphone 何时释放添加到NSMutableDictionary的对象,iphone,arrays,memory-leaks,dictionary,iphone-sdk-3.1,Iphone,Arrays,Memory Leaks,Dictionary,Iphone Sdk 3.1,我正在开发一个iPhone应用程序,它将在运行时构建一个NSMutableDictionary,其中的值(键值对)将是NSMutableArray。由于对Objective-C有些陌生,我担心以下情况会导致内存泄漏: - (void) addNewSupplierPhoto:(UIImage*)image toSupplierID:(NSInteger*) supplierID{ NSMutableArray* supplierPhotoArray = [supplierPhotos objec

我正在开发一个iPhone应用程序,它将在运行时构建一个NSMutableDictionary,其中的值(键值对)将是NSMutableArray。由于对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中dealloc NSMutableDictionary,引用会被释放吗?在解除锁定NSMutableDictionary之前,我是否需要运行它并解除锁定其中包含的各个NSMutableArray

谢谢


Ben B.

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

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

为完整起见,我应该补充一点,该方法不完整;我正在演示创建NSMutableArray的方法。谢谢darren。在发布NSMutableDictionary之前,我是否需要遍历NSMutableDictionary并发布其中的每个NSMutableArray?我会查看NSDictionary ref文档,但我几乎可以肯定,当发布NSArray或NSDictionary时,它会将发布消息发送到它所持有的每个项。“构建和分析”xCode中的菜单项在有疑问时可以很好地突出显示潜在的内存泄漏。