我有更多这样的常量:
static void * MyContext = &MyContext;
现在我想在其userInfo字典中包含此上下文发布NSNotification,但是我将它转换为NSObject *并将其放入NSDictionary中时遇到问题。我正在使用__bridge进行投射,但我在运行时获得了EXC_BAD_ACCESS。
对NSObject *施放void *是否有一些限制?唯一没有崩溃的转换是__bridge_transfer但是在添加到字典时它会崩溃。我已经没有选择了,并且考虑完全删除void *而是使用NSString *。
答案 0 :(得分:1)
您不能投射指向void
的任意NSObject
指针,但是你
可以将包装成NSValue
对象
static void * MyContext = &MyContext;
NSValue *contextValue = [NSValue valueWithPointer:MyContext];
稍后用
检索指针void *context = [contextValue pointerValue];
或者,使用NSString
对象作为上下文
static NSString *MyContext = @"com.company.mycontext";
无需任何桥接。