如何使用 os_trace 打印 Objective-C 指针?
How to print an Objective-C pointer with os_trace?
我正在尝试在 iOS 应用程序中使用 Activity Tracing,在我需要打印 Objective-C 指针之前一切正常。
在 WWDC 14 Session 714 Apple 的幻灯片中提到您可以使用 %p
打印指针:
但是如果不设置 ARC (或我自己)。
,我找不到可靠的方法来做到这一点
我想打印与 NSManagedObject
关联的 NSManagedObjectContext
,因为我使用多个上下文,我希望能够查看我是否将 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 不得不手动 retain/release 打印内存地址的东西太可怕了。
我错过了什么?必须有更好的方法来做到这一点。
将指针传递给打印格式化程序的 %p
参数的正确方法是将其转换为 (void*)
.
我正在尝试在 iOS 应用程序中使用 Activity Tracing,在我需要打印 Objective-C 指针之前一切正常。
在 WWDC 14 Session 714 Apple 的幻灯片中提到您可以使用 %p
打印指针:
但是如果不设置 ARC (或我自己)。
,我找不到可靠的方法来做到这一点我想打印与 NSManagedObject
关联的 NSManagedObjectContext
,因为我使用多个上下文,我希望能够查看我是否将 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 不得不手动 retain/release 打印内存地址的东西太可怕了。
我错过了什么?必须有更好的方法来做到这一点。
将指针传递给打印格式化程序的 %p
参数的正确方法是将其转换为 (void*)
.