这个问题与现有的问题部分相似,但我的内存管理仍然存在错误。
以下非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一般可以工作),代码是否有任何区别?
答案 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和参考视图。