2010-04-06 59 views
0

我有几个UIImagesView,我把它们放在MutableArray上。 MutableArray被保留。 我也将它们添加为视图的子视图。iphone - 关于对象的通用问题

在视图上添加每个经过的UIImageViews我释放他们...例如...

[myView addSubview:myImageView]; 
[myImageView release]; 

如果我没有错,每个ImageView的现拥有2 retainCount,因为它们也存储在MutableArray。

现在我释放视图,因此,每个ImageView的retainCount下降到1

在某些时候,我做的:

myMutableArray = nil; 

是OK做到这一点?由于imageViews的retainCount为1,我不确定是否将数组放入nil,存储imageViews的数组将释放图像......我想是这样,但我希望听到您的掌握!

这会泄漏吗?

感谢

回答

2

你应该忽略,因为系统添加和删除保留幕后计数保留计数,你不可能跟踪它。

相反,您需要专注于匹配您自己创建的保留和释放对。

在这种情况下,您唯一需要注意的是可以保留初始化图像视图。

通常它看起来是这样的:

UIImageView *imgView=[[UIImageView alloc] initWithImage.... 
[myMutableArray addObject:imgView]; 
[myView addSubview:imgView]; 
[imgView release]; 

大功告成。数组和视图将管理它们自己的保留,并且您将初始化的保留与发布相匹配,并且与世界一切都是正确的。

+0

好的。谢谢!!!!!!!!!!! – SpaceDog 2010-04-06 21:33:38

0

是的,会泄漏!您将myMutableArray设置为零而不释放数组。这样做会从NSMutableArray对象和它包含的所有UIImageView对象中泄漏内存。如果你想处置阵列及其内容,然后松开阵列就像你会释放任何其他对象:

[myMutableArray release]; 
myMutableArray = nil; 

的阵列将发送释放消息,它包含了每个对象。