我正在开发一个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。
答案 0 :(得分:5)
当您将对象添加到容器(如字典或数组)中时,将自动调用retain,当您将容器作为问题释放容器时,它会调用每个对象的“释放”以释放对象的内存。
答案 1 :(得分:0)
这种内存管理对我来说是正确的。您释放了已分配的一个副本,并且一旦添加到该数组,该数组将保留另一个引用,因此净计数为1是正确的。