2010-01-18 48 views
2

我在iPhone应用程序,将构建工作的对象,在运行时,一个NSMutableDictionary针对(键值对)的值将是NSMutableArrays。作为有点新的Objective-C的,我所关注的是,以下将导致内存泄漏:当释放添加到一个NSMutableDictionary

- (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)的键值对中的对象是否为零。如果它是零,我分配一个新的NSMutableArray并将其设置为该键的对象,然后释放它。假设我在包含此方法的类的dealloc中释放了NSMutableDictionary,那么这些引用是否会被释放?在释放NSMutableDictionary之前,我是否需要遍历它并释放包含在内的个别NSMutableArrays?

感谢,

奔B.

+0

,我要补充的完整性,该方法是不完整的;我只是展示了我创建NSMutableArrays的方法。 – 2010-01-18 19:43:00

回答

5

,留住会被自动调用,当你松开容器,你的问题是字典,它会调用每一个对象的“释放”到dealloc的对象的内存。

0

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

当您添加对象到像字典或数组的容器
+0

谢谢达伦。在我释放NSMutableDictionary之前,是否需要遍历NSMutableDictionary并释放每个NSMutableArray? – 2010-01-18 20:02:58

+0

我会看看NSDictionary参考文档,但我几乎可以肯定,当一个NSArray或NSDictionary被释放时,它将释放消息发送到它所持有的每个项目。 – 2010-01-18 20:49:14

+0

xCode中的“构建和分析”菜单项确实有助于突出显示潜在的内存泄漏。 – wkw 2010-04-21 12:40:53

相关问题