1

我正在尝试在 iOS 应用程序中设置Activity Tracing,在我需要打印 Objective-C 指针之前,一切都运行良好。

在 WWDC 14 Session 714 Apple 的幻灯片中提到您可以%p用来打印指针:

在此处输入图像描述

但是如果不设置 ARC (或我自己),我找不到可靠的方法。

我想打印NSManagedObjectContext与 a 关联的内容NSManagedObject,因为我使用了多个上下文,我希望能够查看我是否传递NSManagedObject给意外的上下文。

第一次尝试:ARC 禁止结构中的 Objective-C 对象

os_trace("doing something with object in moc %p", object.managedObjectContext);

第二次尝试:编译但不打印我想要的

NSManagedObjectContext *moc = invite.managedObjectContext;
os_trace("doing something with object in moc %p", &moc);

结果跟踪打印0x16fd0e6d0,而(lldb) po invite.managedObjectContext说指针是0x1741fce00

第三次尝试:我不敢相信这是唯一的方法

CFTypeRef moc = CFBridgingRetain(object.managedObjectContext);
os_trace("doing something with object in moc %p", moc);
CFRelease(moc);

这会打印出我期望的地址。但是 OMG 不得不手动保留/释放一些东西来打印内存地址是可怕的。

我错过了什么?必须有更好的方法来做到这一点。

4

1 回答 1

0

将指针传递给%p打印格式化程序的参数的正确方法是将其转换为(void*).

于 2015-09-05T18:03:47.860 回答