【发布时间】:2011-12-29 18:27:51
【问题描述】:
我有一个简单的目标 c 对象
NSManagedObjectContext * moc = nil
现在我需要将它传递给 ARC 环境中接受类型参数的函数
void *volatile * value
我试过了
&((__bridge void *)moc))
但我得到以下编译器错误
Address expression must be lvalue or a function pointer
我也试过
void ** addr = (__bridge void **)(&moc);
但我得到了错误
Incompatible types casting 'NSManagedObjectContext * __strong *' to 'void **' with a __bridge cast
有没有什么方法可以先强制转换,再获取被强制转换的指针的地址?
编辑
更具体地说,我正在尝试实现另一个 stackoverflow question 中描述的单例模式,但是我无法将目标 c NSManagedObjectContext 对象的地址输入到以下函数的第三个参数中ARC 环境。
OSAtomicCompareAndSwapPtrBarrier(void *__oldValue, void *__newValue, void *volatile *__theValue)
【问题讨论】:
-
当我读到它时,在
void*上使用__bridge可能注定要失败。 -
嗯,为什么 void * 和 __bridge 互不兼容?
-
因为
__bridge期望两边都有对象指针。 -
有没有办法解决这个问题以达到预期的效果?
-
嗯,阅读文档将是一个不错的起点。
标签: objective-c cocoa pointers casting automatic-ref-counting