gpt4 book ai didi

objective-c - 具有标量返回值的不可用 Objective C 选择器

转载 作者:行者123 更新时间:2023-12-04 18:18:49 25 4
gpt4 key购买 nike

过去,当我不得不在 Snow Leopard(或任何较旧的 Mac OS X)上编译某些东西并使用 Lion 及更高版本上可用的一些 @selector 时,我做了这样的事情:

if([foo respondsToSelector:@selector(awesomeLionSelector)]) {
[foo awesomeLionSelector]
}

这效果很好。所以,现在我正在尝试对一个返回浮点数的新方法做同样的事情,但是下面的行:
float f = [foo awesomeLionSelectorWhichReturnsFloat];

引发编译错误:“无法在赋值中将 'objc_object*' 转换为 'float'”。这是因为编译器不知道该方法并且必须假定返回类型为“id”。

解决此问题的正确方法是什么?

最佳答案

编辑:根据 John Caswell 的评论,要使用的正确运行时函数是 objc_msgSend_fpret() ,它返回一个 double 值。
我认为您应该尝试以下方式:objc_msgSend_stret() :

objc_msgSend_stret

Sends a message with a data-structure return value to an instance of a class.

  void objc_msgSend_stret(void * stretAddr, id theReceiver, SEL theSelector,  ...)

就像是:
objc_msgSend_stret(&myFloatReturnValue, foo, @selector(awesomeLionSelector));

关于objective-c - 具有标量返回值的不可用 Objective C 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11143510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com