无法释放对象

Posted

技术标签:

【中文标题】无法释放对象【英文标题】:Cannot release an object 【发布时间】:2011-11-08 12:31:27 【问题描述】:

我有一个非常简单的类,叫做 Profile。它包含名为 avatar 的 NSMutableArray,而它又包含 UIImages。这个 NSMutableArray 被声明为 nonatomic,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】:

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

【讨论】:

以上是关于无法释放对象的主要内容,如果未能解决你的问题,请参考以下文章

c# 无法访问已释放的对象

C#Winform打印预览无法访问已释放的对象。

C#无法访问已释放的对象

无法访问已释放的对象。\r\n对象名称: 'ApplicationUserManager'

无法释放对象

c# winform 无法访问已释放的对象。 对象名:“System.ServiceModel.Channels.ServiceChannel”。