ARC中带有“context”变量的beginAnima?

时间:2015-06-03 10:21:38

标签: ios objective-c animation automatic-ref-counting bridge

这个问题与现有的问题部分相似,但我的内存管理仍然存在错误。

以下非ARC代码有效:

[UIView beginAnimations:... context:[[NSNumber numberWithInt:i] retain]];

和didStopSelector中的某个地方:

NSNumber * n = (NSNumber *)context;
...
[n release];

我尝试删除保留/释放并添加副本(并将这些方法结合起来)但没有效果。

此外,我看到了另一个类似的问题:

UIView Animation on multiple UIImageViews in ARC

他们将imageName变量作为context传递,但他们没有描述它是保留还是自动释放。

问题:

1)如何正确地将我的代码转换为ARC?

2)如果你传递保留/自动释放的上下文(cousre,如果autoreleased一般可以工作),代码是否有任何区别?

1 个答案:

答案 0 :(得分:0)

尝试__bridge_retained保留对象并将其转换为void*

void *context = (__bridge_retained void *)( @1000 );

然后在animationDidStop中,您必须使用__bridge_transfer转让所有权。此时ARC应该自然地释放当前自动释放池中的对象。

- (void)animationDidStop:(void *)context {
   NSNumber *n = (__bridge_transfer id)context;
}

或者,您可以直接切换到基于块的API和参考视图。