无法释放对象

时间:2011-11-08 12:31:27

标签: objective-c memory-leaks xcode4 release

我有一个名为Profile的非常简单的类。它包含名为avatar的NSMutableArray,后者又包含UIImages。此NSMutableArray声明为非原子,retain属性。它在Profile的init方法中分配如下:

avatar    = [[NSMutableArray alloc] initWithObjects:
                 [UIImage imageNamed:@"image1.png"], 
                 [UIImage imageNamed:@"image2.png"],
                 [UIImage imageNamed:@"image3.png"],
                 [UIImage imageNamed:@"image4.png"],
                 [UIImage imageNamed:@"image5.png"],nil] ;

并在Profile的dealloc方法中发布。

在我的AppDelegate中,我有一个名为currentProfile的全局Profile对象。它用于各种文件。一旦我需要释放这个对象的头像数组,以便用另一个数组复制它。但复制永远不会完成,因为我在释放阵列时遇到了运行时错误。当我分析代码时,我得到以下内容:

属性返回一个具有+ 0保留计数(非拥有引用)的Objective-с对象

调用者此时未拥有的对象的引用计数的错误减少

怎么了?为什么我不能发布阵列?只因为它是一个班级的成员?如果是这样,我如何用新的内容替换数组的内容?

1 个答案:

答案 0 :(得分:1)

好吧..如果你不能释放它,你总是可以将它设置为nil,这样它就会丢弃整个内容,然后你可以用新的数据加载重新分配数组。 另一个解决方案是在Profile类中创建一个方法,使得= nil + release 数组,因此可以由使用该类对象的其他类直接调用。