gpt4 book ai didi

objective-c - 如何从空指针记录数据和类型?

转载 作者:行者123 更新时间:2023-12-04 06:59:50 24 4
gpt4 key购买 nike

我有以下代码:

eachShape(void *ptr, void* unused) {
cpShape *shape = (cpShape *) ptr;
id obj = shape->data;
NSLog(@"shape->data: %@", obj); // this is where EXC_BAD_ACCESS can occur
...

你们中的一些人可能会从 iPhone 开发中使用的 Chipmunk 物理框架中认出它。基本上我在这里崩溃是因为我在其他关于 cpSpace 的代码中做了一些事情,但我想弄清楚这里发送的是什么对象类型并使我的 NSLog 语句崩溃(并造成其他破坏)。

将类型和/或内容从 void 指针转储到 NSLog 调用的最佳方法是什么?

最佳答案

我认为你的问题是 %@只有在 shape->data 时才有意义实际上指向一个 Objective-C 对象,因为使用它会触发 -description 的发送。至 obj .
但如果例如 shape->data指向 int ,消息将被发送到一个并不真正存在的对象。相反,某些内存位置可能会被解释为对象的原始字节,从而导致运行时崩溃。

回答您的问题:void 指针的类型是 void * ,指针的目标类型为 void .您可以使用 %p 打印指针的值,但我怀疑这是否是您想要的。

所以如果你确定内存位置在哪里shape->data指向代表一个Objective-C对象,并且可以访问类代码,可以覆盖-description打印您喜欢的任何信息。

关于objective-c - 如何从空指针记录数据和类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2050928/

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