【发布时间】:2015-02-06 14:05:59
【问题描述】:
我有一些需要使用 C 函数的 Objective-C 代码。该函数的“UserData”类型为long。我需要使用它来传递对self 的引用,所以我像这样传递它:
Proc((intptr_t) self);
另一端的干净解决方案如下所示:
int Proc(long UserData) {
MyType *refToSelf = (MyType*)(intptr_t)UserData;
}
但这在 ARC 下是不允许的:“ARC 不允许将 'intptr_t' (aka 'long') 转换为 'MyType *'”
C 函数是在MyType 的实现中声明的,所以我不需要保留它。如何使用 ARC 在long 中获取我的参考信息?
【问题讨论】:
-
为什么您认为将其转换为
void**是正确的?如果 self 只是一个指针,则将其转换为该指针类型。然后,更挑剔,uintptr_t是无符号整数类型,long是有符号类型。
标签: c++ objective-c c cocoa automatic-ref-counting