如何判断CFArray中对象的类类型
2014-08-10 22:24
239 查看
在Foundation框架中,我们很容易判断一个对象是什么类型的,因为NSObject中封装了判断的方法,如下所示:
但是在CoreFoundation框架中,就没有提供这样的方法。
当我们调用方法获取CFArray中的对象时,如下
返回的类型是void*,如果这个数组不是我们自己添加的数据,我们就有可能不知道它里面装的对象是什么类型,如果统一用某一类型去强转,肯定会出问题,那有什么办法判断对象类型呢。
通过查看CF的API,发现了常用的数据类型中都存在这样一个函数:
这个CFTypeID是一个无符号长整形值,估计是标识这个数据类型的,后面在CFBase.h头文件中,又找到了这样一个函数:
这样一来,就很明显了,CF框架就是通过这样的方式来判断数据类型。
- (BOOL)isKindOfClass:(Class)aClass;
但是在CoreFoundation框架中,就没有提供这样的方法。
当我们调用方法获取CFArray中的对象时,如下
CF_EXPORT const void *CFArrayGetValueAtIndex(CFArrayRef theArray, CFIndex idx);
返回的类型是void*,如果这个数组不是我们自己添加的数据,我们就有可能不知道它里面装的对象是什么类型,如果统一用某一类型去强转,肯定会出问题,那有什么办法判断对象类型呢。
通过查看CF的API,发现了常用的数据类型中都存在这样一个函数:
CF_EXPORT CFTypeID CFArrayGetTypeID(void); CF_EXPORT CFTypeID CFStringGetTypeID(void); CF_EXPORT CFTypeID CFDictionaryGetTypeID(void);
这个CFTypeID是一个无符号长整形值,估计是标识这个数据类型的,后面在CFBase.h头文件中,又找到了这样一个函数:
CF_EXPORT CFTypeID CFGetTypeID(CFTypeRef cf);
这样一来,就很明显了,CF框架就是通过这样的方式来判断数据类型。
CFArrayRef theArray = NULL; if(CFGetTypeID(CFArrayGetValueAtIndex(theArray, 0)) == CFDictionaryGetTypeID()) { NSLog(@"is CFDictionaryRef"); }
相关文章推荐
- JavaScript isArray()函数判断对象类型的种种方法
- 如何判断对象包含List<T>中的类型
- js如何判断一个对象是不是Array?
- javascript如何判断一个对象是不是Array
- js如何判断一个对象是不是Array?
- js如何判断一个对象是不是Array?
- 如何判断一个变量是数组Array类型
- javascript 如何判断一个对象的类型
- JAVA如何判断对象的类型
- js如何判断一个对象是不是Array
- 如何判断javascript中参数类型,对象类型。
- 如何判断一个变量是数组Array类型
- (php的弱类型导致的小问题)某变量可能是数字或非数字(对象、字符串、json等)时,应该如何去判断
- js如何判断一个对象是不是Array?
- 如何在.net开发的代码中遍历所有的图形对象,并判断是什么类型的对象!
- js如何判断一个对象是不是Array?
- js中判断Object、Array、Function等引用类型对象是否相等
- javascript中如何做对象的类型判断
- JS如何判断一个对象是不是Array
- JavaScript中如何判断变量是数组、函数或是对象类型