iphone - 关于对象的一般性问题

时间:2010-04-06 19:59:12

标签: iphone iphone-sdk-3.0

我有几个UIImagesView,我将它们放在MutableArray上。 MutableArray保留。 我也将它们添加为视图的子视图。

在视图上添加每个UIImageViews后,我将它们释放出来......例如......

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

如果我没错,每个imageView现在都有一个retainCount为2,因为它们也存储在MutableArray中。

现在我发布了视图,因此,每个imageView的retainCount都会降为1。

在某些时候我做了:

myMutableArray = nil;

这样做可以吗?由于imageViews还有一个retainCount为1,我不确定是否将数组放到nil,存储imageViews的数组会释放图像......我想是这样,但我想听听你的主人的意见! / p> 这会泄漏吗?

感谢

2 个答案:

答案 0 :(得分:2)

您应该忽略保留计数,因为系统会在后台添加和删除保留计数,您无法跟踪它。

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

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

通常它看起来像这样:

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

你已经完成了。数组和视图将管理自己的保留,并且您将初始化的保留与发布相匹配,并且所有这些都与世界相符。

答案 1 :(得分:0)

是的,会泄漏!您将myMutableArray设置为nil而不释放数组。这样做会从NSMutableArray对象及其包含的所有UIImageView对象泄漏内存。如果要处理数组及其内容,则释放数组就像释放任何其他对象一样:

[myMutableArray release];
myMutableArray = nil;

然后,数组将向其包含的每个对象发送一条释放消息。