在OC中获取C的数据类型

来源:互联网 发布:乐视视频无法连接网络 编辑:程序博客网 时间:2024/05/13 13:24

--------------------------
1--使用@encode关键字
--------------------
 
使用@encode关键字,可以获取C和OC中的数据类型.
 
返回一个字符串的首字母的地址.
 
用法:
enum workday
{
    mon,tue,thr,fri
};
struct aaa
{
    int a;
    float b;
    char c;
};
union bbb
{
    int a;
    float b;
    char c;
};
 
//基本类型和枚举
NSLog(@"%s",@encode(short));          //s
NSLog(@"%s",@encode(int));            //i
NSLog(@"%s",@encode(long));           //q
NSLog(@"%s",@encode(float));          //f
NSLog(@"%s",@encode(double));         //d
//由此可见,枚举的本质,就是int基本数据类型.
NSLog(@"%s",@encode(enum workday));   //i
 
//由此可见,数组的本质,就是一个指向数组中第一个元素的指针.
NSLog(@"%s",@encode(int[]));          //^i
NSLog(@"%s",@encode(int[5]));         //[5i]
 
//结构体和共用体
NSLog(@"%s",@encode(struct aaa));     //{aaa=ifc}
NSLog(@"%s",@encode(union bbb));      //(bbb=ifc)
 
//指针类型
NSLog(@"%s",@encode(int *));          //^i
NSLog(@"%s",@encode(struct aaa *));   //^{aaa=ifc}
 
//OC对象类型
NSLog(@"%s",@encode(NSObject *));     //@
NSLog(@"%s",@encode(NSSet *));        //@
 
--------------------------
2--使用–objCType方法
--------------------
 
使用NSValue对象的 –objCType方法,可以获取C和OC中的数据类型.
返回一个字符串的首字母的地址.
 
用法:
int i;
int *p = &i;
//可以判断OC对象中,所封装的C的数据类型.
NSValue *value = [NSValue valueWithBytes:&p objCType:@encode(int *)];
if(strcmp(value.objCType,@encode(int *)) == 0)
{
    NSLog(@"这是一个int *类型的数据");
}
 
------------------------
3--返回C语言的字符串
--------------------
 
@encode( )指令和 –objCType方法:
1.返回的都是一个C语言的字符串,而不是一个OC的NSString类型的对象.
2.不能直接使用NSString对象的 –isEqualToString:方法,进行比较.
 
C字符串,比较方式:
1.可以使用C语言中的strcmp( , )函数.       //需要导入#include <string.h>头文件.
2.可以使用@( )把C字符串,转换为OC的NSString对象,再调用 –isEqualToString:方法.
 
----------------
0 0
原创粉丝点击