LooK这个方法: beginAnimations:背景: 这是UIView类的方法。上下文需要参数是一种void-pointer,我需要将UIImageView发送到上下文。 我收到一个警告,当我使用ARC时,我已经禁止使用void *。那么除了不使用ARC之外,我怎样才能将UIImageView发送到上下文。
答案 0 :(得分:0)
上面的评论为这个特定情况提供了正确的答案(使用基于块的动画方法),但一般来说,如果你有一个API,它接受一个上下文void *
并且你想要传递一个对象,我发现最好将id
转换为CFTypeRef
,这样就可以在指针上获得手动内存管理语义(CFTypeRef
是void *
的typedef)等。但是,这需要调用回调 才能释放对象(即转换回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);
...
}