【发布时间】:2012-01-21 16:48:26
【问题描述】:
这让我很生气..因为它是一个内存管理问题...
我在类 2 中创建了一个 NSArray
@property (nonatomic, copy) NSArray * sourceArray;
我从另一个类中设置了这个数组,比如 Class 1 ...
Class2 = [[Class2 alloc] initWithFrame:self.bounds];
[Class2 setSourceArray:self.namesArray];
我确信 self.namesArray 包含对象。
当我发布 Class 1 时,它会发布 Class 2,因为 Class 2 是 Class 1 中的子视图,这是预期的,但是当 Class 2 在 dealloc 中释放 sourceArray 时,我得到一个 EXEC_BAD_ACCESS...
[sourceArray release];
如果我不在 Class 1 中发布 namesArray,我不会收到此错误。这没有意义,因为我使用我将 sourceArray 声明为 COPY,据我所知,这为 Class 2 提供了它自己的数组版本。 .
有人可以帮我吗?它杀了我!
更多信息: 在我尝试释放 sourcearray 之前的引用计数是 1... 那么为什么释放不起作用?!
【问题讨论】:
-
您是否尝试过使用 Instruments 中的 Zombies 工具来诊断您的问题?
-
不要在class2中释放数组,可能是你在使用这个数组包含在class1中
-
崩溃时我得到的只是 -[CFString release]: message sent to deallocated instance 0x2a9530 但这没有意义,因为我从 Class1 复制了对象,对吧?
-
如果我不在任何一个类中释放它,我将使用分析器得到一个泄露的数组。
-
正如你所说,它给出了-[CFString release]:消息发送到已释放的实例 0x2a9530,但 sourceArray 是 NSArray。您确定崩溃发生在 [sourceArray release] 行吗?如果是这样,那么当您将其复制到 sourceArray 时,self.namesArray 可能超出范围。否则是因为你过度释放了一些字符串。
标签: iphone objective-c ios memory-management exc-bad-access