Objective-C电弧转换的几个问题

Objective-C电弧转换的几个问题,objective-c,automatic-ref-counting,Objective C,Automatic Ref Counting,我试图将我的代码转换为Objective-C ARC,但出现了几个错误 1.: 它说:ARC不允许将Objective.C指针隐式转换为“void*” 2.: 它说:ARC不允许将非Objective-C指针类型“void*”隐式转换为“NSBezierPath*” 有什么想法吗?我如何解决这些问题?您需要使用。在这种情况下,您只需要简单的\u桥修饰符,例如 NSBezierPath *path = [NSBezierPath bezierPath]; CGPathApply(pathRef,

我试图将我的代码转换为Objective-C ARC,但出现了几个错误

1.:

它说:ARC不允许将Objective.C指针隐式转换为“void*”

2.:

它说:ARC不允许将非Objective-C指针类型“void*”隐式转换为“NSBezierPath*”

有什么想法吗?我如何解决这些问题?

您需要使用。在这种情况下,您只需要简单的
\u桥
修饰符,例如

NSBezierPath *path = [NSBezierPath bezierPath];
CGPathApply(pathRef, (__bridge void *)path, CGPathCallback);


谢谢第二个代码有效,但第一个解决方案无效。我得到:将“CGPathRef”(又名“const struct CGPath*)传递给“void*”类型的参数将丢弃限定符。@Flocked:对不起,我没有意识到这是一个
void*
参数。您可以使用
(\uu bridge void*)
,我将更新我的答案以反映这一点。
static void CGPathCallback(void *info, const CGPathElement *element) {
NSBezierPath *path = info; //error
[…] }
NSBezierPath *path = [NSBezierPath bezierPath];
CGPathApply(pathRef, (__bridge void *)path, CGPathCallback);
static void CGPathCallback(void *info, const CGPathElement *element) {
    NSBezierPath *path = (__bridge NSBezierPath*)info;
    ...
}