【发布时间】:2025-12-30 11:50:16
【问题描述】:
这是我第一次在这里问问题,所以请不要对我太苛刻:-)。我有一个奇怪的“错误访问”问题。在我的一个班级中,我有一个NSInteger 和其他一些成员。我重写了- (NSString *)description 方法来打印所有类似的值(省略了不相关的部分):
- (NSString *)description {
return [NSString stringWithFormat:@"Duration:%d", duration];
}
然后我使用NSLog(@"%@", myObject) 打印它,这给了我 EXC_BAD_ACCESS 没有任何日志消息,不管 NSZombieEnabled 是什么。
- 我已经仔细检查了所有格式说明符的顺序和 参数 - 正确。
- 我尝试将格式说明符更改为
%i和%@,但没有得到任何结果 - 当我初始化我的对象时,我没有初始化
期间。后来,我通过属性
@property NSInteger duration分配它。所以我尝试在我的init中将持续时间初始化为 0 方法,但无济于事。 - 如果我将持续时间设置为 NSNumber 之前 打印,它的工作原理。
- 当我删除持续时间并保留所有 其他 ivars 它再次起作用。
我被难住了,我在这里做错了什么? 你能帮帮我吗?
非常感谢!
编辑:总而言之,这似乎是由 32 位和 64 位平台之间的差异引起的,因为在 iphone 4 上运行时它很好,只有在模拟器中运行时才会出现问题。我尝试了 3 种不同的方法 - 使用 %d 和 %i 与 NSInteger 变量本身,使用 %qi 和使用 %ld/ %lx,我还尝试使用各种格式说明符。每次我都可以在设备上运行,但是在模拟器中获取EXC_BAD_ACCESS。
【问题讨论】:
-
在您的方法中设置一个制动点并读取您的“持续时间”值,我认为当您在那里时它没有设置...
-
我确实在 NSLog 处设置了一个断点 - myObject 是有效的,并且它在那里有一个有效的持续时间......无论如何谢谢 Marco!
-
您的代码中没有一个名为
duration的宏吗? -
没有 Nielsbot,我只有一个叫
kDurationTag...谢谢!
标签: objective-c ios cocoa-touch memory-management