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