gpt4 book ai didi

objective-c - Objective-C : objc_msgSend return type

转载 作者:搜寻专家 更新时间:2023-10-30 19:50:53 24 4
gpt4 key购买 nike

如何判断objc_msgSend的结果类型?

来自文档:

id objc_msgSend(id theReceiver, SEL theSelector, ...)

也就是说,objc_msgSend 返回的所有内容都是 id 类型,对吗?但有时该函数返回一个正确的 Objective C 对象(当请求 NSWindow +new 时),有时它只返回一个 bool 值(这是一个 C char)。

如何区分这些不同的结果?我怎么知道它返回的是对象还是原始类型?

编辑:感谢您的回复!还有一个问题:是否至少可以判断返回的类型是原始类型还是适当的对象(然后可能通过 object_getClass 查询它)?

最佳答案

objc_msgSend 的调用者应该已经知道返回的类型,并且必须有效地将 objc_msgSend 转换为返回正确值的函数指针类型。例如,-[NSString UTF8String] 将像这样手动调用:

const char *cStr = ((const char *(*)(id, SEL))objc_msgSend)
(@"foo", @selector(UTF8String));

是的,相当多,这就是为什么让编译器来做通常是更好的主意。如果您在发送消息时需要更多的活力,我建议您查看 NSInvocation第一的。除其他事项外,用于初始化调用的方法签名将包括有关返回类型和所有参数的信息。

关于objective-c - Objective-C : objc_msgSend return type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11285780/

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