释放复制对象时的 EXEC_BAD_ACCESS
这一直杀了我..因为它是一个内存管理问题...
我创建了一个 NSArray,就像在 Class 2 中一样,
@property (nonatomic, copy) NSArray * sourceArray;
我从另一个类(比如 Class 1)设置了这个数组...
Class2 = [[Class2 alloc] initWithFrame:self.bounds];
[Class2 setSourceArray:self.namesArray];
我确信 self.namesArray 包含对象。
当我释放类 1 时,它会释放类 2,因为类 2 是类 1 中的子视图,这是预期的,但是当类 2 在 dealloc 中释放 sourceArray 时,我会得到 EXEC_BAD_ACCESS,如下所示...
[sourceArray release];
如果我不这样做,我就不会收到此错误在第 1 类中释放 nameArray .. 这没有意义,因为我正在使用我将 sourceArray 声明为 COPY ,据我所知,这为第 2 类提供了自己的数组版本...
任何人都可以在这里帮助我吗?它杀了我!
更多信息: 在我尝试释放 sourcearray 之前的引用计数是 1...那么为什么释放不起作用?!
This has been killing me.. Because its a memory management issue...
I have a NSArray created like so in say Class 2
@property (nonatomic, copy) NSArray * sourceArray;
I set this array from another class say Class 1 like ...
Class2 = [[Class2 alloc] initWithFrame:self.bounds];
[Class2 setSourceArray:self.namesArray];
Where I am sure that self.namesArray contains objects.
When I release Class 1, it releases Class 2 since Class 2 is a subview in Class 1 which is expected, but I get an EXEC_BAD_ACCESS when Class 2 releases sourceArray in dealloc like so...
[sourceArray release];
I DO NOT get this error if I do not release namesArray in Class 1.. Which doesn't make sense because I am using I declared sourceArray as COPY which to my knowledge gives Class 2 its own version of the array...
Can anyone help me here? Its killing me!
More info:
The reference count right before I try to release sourcearray is 1... So Why would a release not work?!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这就是想法,但它可能会帮助您了解
-copy
通常只保留不可变对象的对象。这对您的代码来说并不重要,因为原始代码与不可变对象的副本没有区别。可能是您过度释放了 Class1 中的数组,并且只有当 Class2 释放它的数组的“副本”时,问题才会出现。That's the idea, but it may help you to know that
-copy
often just retains the object for immutable objects. That shouldn't matter to your code, since the original is indistinguishable from a copy for immutable objects. It may be that you're over-releasing the array in Class1, and the problem only shows up when Class2 releases it's "copy" of the array.