2012-07-07 51 views
1

LooK此方法: beginAnimations:context: 这是UIView类的方法。上下文需要参数,它是一种空指针类型,我需要将UIImageView发送到上下文。 我收到警告,说当我使用ARC时void *已被禁止。那么如何将UIImageView发送到上下文,除非不使用ARC。当我在IOS项目中使用ARC时,如何使用void *?

+2

使用的UIView的块动画的方法。这样更方便,因为您不需要在其他地方使用动画完成代理。 – 2012-07-07 15:50:06

+0

加上文档说使用块动画方法。 – 2012-07-07 15:54:35

+0

感谢您的帮助。我将学习使用UIView的块动画方法。 – 2012-07-07 15:58:42

回答

0

上面的评论为这种特殊情况提供了正确的答案(使用基于块的动画方法),但是一般情况下,如果你有一个API需要上下文void *并且你想传递一个对象,我发现它最好将您的id转换为CFTypeRef,这样您就可以在指针上获得手动内存管理语义(CFTypeRefvoid *的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); 
    ... 
} 
相关问题