在 (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 指针传递的字符串参数

在谈论重叠 I/O 时,上下文信息意味着啥?

在推送通知的上下文中,“后台应用程序”是啥意思?

上下文对象是啥意思,在调用intent方法时,要传入一个上下文对象,到底是啥意思⊙_⊙

JavaWeb总结