【发布时间】:2013-02-13 07:32:47
【问题描述】:
Iphone - how to pass a parameter to animationDidStop? 此处的这个问题在上下文中提出了整个问题。根据那里的最佳答案,我在我的 animationDidStopSelector 中发布了上下文。但是自从我更新了我的 Xcode,我收到了这个警告
- (void) helloThere: (int) myValue {
// I am trying to pass myValue to animationDidStop
[UIView beginAnimations:nil context:[[NSNumber alloc] initWithFloat:self.view.frame.origin.x]]; //Warning raised on this line
[UIView setAnimationDuration:1.0];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
[UIView setAnimationDelegate:self];
// do stuff
[UIView commitAnimations];
}
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
CGFloat usesThisValue = [(NSNumber *) context floatValue];
[(NSNumber *) context release];
}
日志中的警告说:
warning: Potential leak of an object [UIView beginAnimations:nil context:[[NSNumber alloc] initWithFloat:self.view.frame.origin.x]]; //Warning raised on this line
1 warning generated.
有解决办法吗?如果没有,我该如何为我的项目关闭此警告?
【问题讨论】:
-
信息不够!泄漏点在哪里?请显示更多代码和更多来自 clang/instruments 的输出。
-
希望我现在能更好地解释这个问题。
-
如果您使用
CFNumberRef而不是NSNumber*,它还会抱怨吗? -
@Richard 再次创建 CFNumberRef 需要我有一个指向该值的指针。这样它就变得类似于 stackoverflow.com/a/2297483/1685709 中的“malloc 方法”。因此,将重新生成相同的警告。尽管由于我对 CFNumberRef 的工作不多,但我可能完全做错了。你能提供一个你想要提出的例子吗?
-
begin / commitAnimations是 iOS4 之前的古老 API,您应该改用基于块的 UIView 动画方法。
标签: ios objective-c xcode memory-leaks