【问题标题】:iphone - generic question about objectsiphone - 关于对象的一般问题
【发布时间】:2010-04-06 19:59:12
【问题描述】:

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

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

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

如果我没记错的话,每个 imageView 现在的 retainCount 为 2,因为它们也存储在 MutableArray 上。

现在我释放视图,所以每个 imageView 的 retainCount 都下降到 1。

有时我会这样做:

myMutableArray = nil;

这样做可以吗?由于 imageViews 的 retainCount 还为 1,我不确定是否将数组设置为 nil,存储 imageViews 的数组将释放图像......我想是这样,但我想听听各位大师的意见!

这会泄漏吗?

谢谢

【问题讨论】:

    标签: iphone iphone-sdk-3.0


    【解决方案1】:

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

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

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

    通常看起来像这样:

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

    你就完成了。数组和视图将管理它们自己的保留,并且您将初始化的保留与发布相匹配,一切正常。

    【讨论】:

      【解决方案2】:

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

      [myMutableArray release];
      myMutableArray = nil;
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多