什么可以传入(void *)上下文?

时间:2010-10-19 10:23:02

标签: iphone ios uiviewanimation

我正在使用

做一些UIView动画
[UIView beginAnimations:nil context:nil];
// ... Animation configuration ...
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationEnded:finished:context:)];
[UIView commitAnimations];

关于以下问题:Apple rejected app because of animationDidStop:finished:context: is a non-public api

我将自己的方法实现为“setAnimationDidStopSelector”。

我的问题是关于 context:(void *)context 参数。 Apple将其定义如下:

  

附加应用程序提供   传递给的信息   动画委托消息 -   选择器使用   setAnimationWillStartSelector:和   setAnimationDidStopSelector:methods。

我想知道什么东西可以作为一个上下文传递。我对Objective-C和C编程比较陌生,而且在void *类型方面有点失落。

我们可以传入任何类型的参数,对象,NSDictionnary,NSString等。

由于

2 个答案:

答案 0 :(得分:3)

void *是指向任何事物的指针。您可以将指针传递给任何对象或其他东西,例如struct或Core Foundation opaque类型。要摆脱编译器警告,请将指针强制转换为void *

... context:(void *)myDictionary];

请注意,该方法不知道context包含什么,因此不会保留它或以其他方式关注正确的内存管理。在调用动画委托方法时,您必须确保传递给context的内容仍然存在。

答案 1 :(得分:0)

context:(void *)myDictionary];

调用此方法并尝试传递

(void *)[NSNumber numberWithInt:5] - 

xCode建议制作一些_bridge,因为无效的指针从C到Objective-C ......