释放复制对象时的 EXEC_BAD_ACCESS

发布于 2024-12-21 12:19:57 字数 700 浏览 2 评论 0原文

这一直杀了我..因为它是一个内存管理问题...

我创建了一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

意中人 2024-12-28 12:19:57

这没有意义,因为我正在使用我将 sourceArray 声明为
据我所知,COPY 为 Class 2 提供了自己的数组版本。

这就是想法,但它可能会帮助您了解 -copy 通常只保留不可变对象的对象。这对您的代码来说并不重要,因为原始代码与不可变对象的副本没有区别。可能是您过度释放了 Class1 中的数组,并且只有当 Class2 释放它的数组的“副本”时,问题才会出现。

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.

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文