在 (void *) 上下文中可以传递啥?
Posted
技术标签:
【中文标题】在 (void *) 上下文中可以传递啥?【英文标题】:What can be passed in (void *)context?在 (void *) 上下文中可以传递什么? 【发布时间】:2010-10-19 10:23:02 【问题描述】:我正在使用一些 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 参数。苹果将其定义如下:
其他应用程序提供 传递给 动画委托消息—— 选择器设置使用 setAnimationWillStartSelector:和 setAnimationDidStopSelector:方法。
我想知道什么东西之王可以作为上下文传递。我对 Objective-C 和 C 编程比较陌生,对 void* 类型有点迷茫。
我们可以传入任何类型的参数、对象、NSDictionnary、NSString 等吗?
谢谢
【问题讨论】:
【参考方案1】:void *
是指向任何东西的指针。您可以将指针传递给任何对象或其他东西,例如结构或 Core Foundation 不透明类型。要摆脱编译器警告,请将指针转换为void *
:
... context:(void *)myDictionary];
请注意,该方法不知道context
包含什么,因此不会保留它或以其他方式关心正确的内存管理。您必须确保在调用动画委托方法时传递给context
的东西仍然存在。
【讨论】:
好的,谢谢你的回答,这听起来很清楚,我刚刚发现了这个问题***.com/questions/1304176/…【参考方案2】:context:(void *)myDictionary];
当调用该方法并试图通过时
(void *)[NSNumber numberWithInt:5] -
xCode 建议制作一些 _bridge,因为从 C 到 Objective-C 的指针转换无效 ...
【讨论】:
以上是关于在 (void *) 上下文中可以传递啥?的主要内容,如果未能解决你的问题,请参考以下文章
在 PubSub 订阅确认截止日期和重新传递的上下文中,未发送给订阅者的消息是啥意思?
如何检查 googlemock 中作为 void 指针传递的字符串参数