gpt4 book ai didi

iphone - NSZombieEnabled 完全隐藏 EXC_BAD_ACCESS 错误

转载 作者:行者123 更新时间:2023-12-03 16:22:41 25 4
gpt4 key购买 nike

所以我有一个 UIView 的子类,当我经历一组特定的条件时(在 iPad 而不是 iPhone 或模拟器上运行,仅首次登录),它开始导致 EXC_BAD_ACCESS 错误。当 UIView 子类从池中自动释放时(即池正在释放,而不是当我在最后一行调用 [view autorelease] 时,我有 [super dealloc] ),它会抛出异常。我听说过使用 NSZombieEnabled,所以我把它扔掉,看看是否可以获得更多有关它的信息,但现在它完全隐藏了错误!

有人对这种情况了解更多吗?我以为 NSZombie 会像以前一样开始向我的控制台喷出东西,但我希望错误的不存在也能告诉我一些信息。

- (void)dealloc  
{
[loadingLabel release];
[indicatorView release];
[super dealloc];
}

编辑:好的,所以我解决了根本问题:

我的属性(property)之一是:
@property (nonatomic,retain) NSString * title;

但是,该属性的代码如下(loadingLabel 是 UILabel):

- (void)setTitle:(NSString *)title
{
loadingLabel.text = title;
[loadingLabel sizeToFit];
[self setNeedsLayout];
}

- (NSString *)title
{
return loadingLabel.text;
}

我实际上不保留任何内容,而只保留 UILabel.text,这是一个复制属性。因此,我更改了自己的标题属性来反射(reflect)这一点,并且错误消失了。

但是,我仍然不知道这个错误是如何或为什么会首先出现,以及为什么它只出现在 iPad 平台上(而不是 iPhone,甚至 iPad 模拟器)。

最佳答案

So I have a subclass of a UIView that starts causing EXC_BAD_ACCESS errors when I go through a specific set of conditions (run on iPad instead of iPhone or simulator, first login only). It throws the exception when the UIView subclass gets autoreleased from the pool (i.e. the pool is releasing, not when I'm calling [view autorelease], during the last line, where I have [super dealloc]. I heard about using NSZombieEnabled, so I tossed that on to see if I could get any more information about it, but now it hides the error completely!

您获得 EXC_BAD_ACCESS 因为您尝试使用死对象。

NSZombieEnabled 使对象不会死亡。由于该对象从未死亡,因此您的应用程序不会崩溃。相反,您将在控制台日志(在 Xcode 下运行时为调试器控制台)中收到一条消息,告诉您做错了什么并建议设置断点。

更具体地说,NSZombie 消息会告诉您向哪类对象发送了消息,以及发送了什么消息。如果您设置断点并在调试器处于事件状态的情况下运行您的应用程序,调试器将在该点中断(“中断”)您的应用程序,以便您可以环顾四周并查看是什么向僵尸对象发送了消息。

I don't actually retain anything, but rather only [assign to] a UILabel.text, which is a copy property.

因此,该字符串可能因不属于任何东西而消失。使用 NSZombieEnabled 和上述技术,您可以确认是字符串过早消失的理论。

不过,更好、更简单的方法是使用 Instruments 的 Zombies 模板。 Xcode 的调试器控制台中不会出现消息,而是会在 Instruments 的时间轴中出现一个带有信息的标志。该标志将有一个转到 iTunes-Store (➲) 按钮,您可以单击该按钮以获取有关该问题的更多信息。

关于iphone - NSZombieEnabled 完全隐藏 EXC_BAD_ACCESS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2685464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com