1
LooK此方法: beginAnimations:context: 这是UIView类的方法。上下文需要参数,它是一种空指针类型,我需要将UIImageView发送到上下文。 我收到警告,说当我使用ARC时void *已被禁止。那么如何将UIImageView发送到上下文,除非不使用ARC。当我在IOS项目中使用ARC时,如何使用void *?
LooK此方法: beginAnimations:context: 这是UIView类的方法。上下文需要参数,它是一种空指针类型,我需要将UIImageView发送到上下文。 我收到警告,说当我使用ARC时void *已被禁止。那么如何将UIImageView发送到上下文,除非不使用ARC。当我在IOS项目中使用ARC时,如何使用void *?
上面的评论为这种特殊情况提供了正确的答案(使用基于块的动画方法),但是一般情况下,如果你有一个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);
...
}
使用的UIView的块动画的方法。这样更方便,因为您不需要在其他地方使用动画完成代理。 – 2012-07-07 15:50:06
加上文档说使用块动画方法。 – 2012-07-07 15:54:35
感谢您的帮助。我将学习使用UIView的块动画方法。 – 2012-07-07 15:58:42