1

看看这个方法: beginAnimations:context:这是 UIView 类的一个方法。上下文需要参数,它是一种无效指针,我需要将 UIImageView 发送到上下文。我收到一个警告,上面说当我使用 ARC 时 void* 已被禁止。那么除了不使用 ARC 之外,我如何将 UIImageView 发送到上下文。

4

1 回答 1

0

上面的评论为这种特殊情况提供了正确的答案(使用基于块的动画方法),但一般来说,如果你有一个接受上下文的 APIvoid *并且你想传递一个对象,我发现最好将你转换id为aCFTypeRef这样您就可以在指针上获得手动内存管理语义(CFTypeRef是 typedef for void *)等。但是请注意,这要求必须调用回调才能释放您的对象(即转换回 ARC 的内置管理) .

这是我刚刚梦想的一些虚构 API 的示例:

- (void) doSomethingWithObject: (id) object {
    // use CFBridgingRetain() to turn object into a manually-retained CFTypeRef/void*
    [someObject performBackgroundTaskWithTarget: self
                                       selector: @selector(bgTask:)
                                        context: CFBridgingRetain(object)];
}

- (void) bgTask: (void *) context
{
    // use CFBridgingRelease() to turn our void*/CFTypeRef into an ARC-managed id
    id object = CFBridgingRelease((CFTypeRef)context);
    ...
}
于 2012-07-07T17:27:35.250 回答