大佬教程收集整理的这篇文章主要介绍了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 ... }
提前致谢.
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,请注明来意。