将静态void *转换为NSObject *

时间:2015-07-27 09:44:32

标签: ios objective-c

我有更多这样的常量:

static void * MyContext = &MyContext;

现在我想在其userInfo字典中包含此上下文发布NSNotification,但是我将它转换为NSObject *并将其放入NSDictionary中时遇到问题。我正在使用__bridge进行投射,但我在运行时获得了EXC_BAD_ACCESS。

对NSObject *施放void *是否有一些限制?唯一没有崩溃的转换是__bridge_transfer但是在添加到字典时它会崩溃。我已经没有选择了,并且考虑完全删除void *而是使用NSString *。

1 个答案:

答案 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";

无需任何桥接。