HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 确定来自NSInvocation getArgument的if(void *)指针是对象还是原始指针大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
苦苦挣扎着这一个.希望它是可能的,我听起来并不傻.

我正在写一篇正在写作的课程中.我想要做的是将调用转发给一个或另一个选择器,具体取决于它是对象还是基本类型.最终目标是我想“封装”基元,以便将它们添加到数组/字典中.为简单起见,这里通常出现的两种类型的值是NSStrings和枚举.

简而言之,给定一个指针,有没有办法判断它是否是一个对象?

__unsafe_unretained id argument;
[anInvocation getArgument:&argument aTindex:2];

// EXC_BAD_ACCESS if primitive (i.e. NSInteger value of 2 ($1 = 0x00000002) )
if (![argument isKindOfClass:[NSObject class]]) {
    // Box the value
    ...
}

有没有可以运行的测试?现在我的代码是愚蠢地做这个讨厌的伎俩:

// All my enums have at most 10 elements. I'm so bad at code.
if ((NSInteger)argument < 10) {
    // Box the value
    ...
}

提前致谢.

解决方法

您可以从方法签名中@L_696_13@类型:

NSMethodSignature *signature = [invocation methodSignature];
const char* argType = [signature getArgumentTypeATindex:2];

这些类型列在Type Encodings in the Objective-C Runtime Guide

您还应该在调用getArgument之前确保知道类型:aTindex ::

__unsafe_unretained id argument;
[anInvocation getArgument:&argument aTindex:2];

如果实际参数的大小大于sizeof(id),这将在堆栈上写入过去的参数

大佬总结

以上是大佬教程为你收集整理的ios – 确定来自NSInvocation getArgument的if(void *)指针是对象还是原始指针全部内容,希望文章能够帮你解决ios – 确定来自NSInvocation getArgument的if(void *)指针是对象还是原始指针所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。