Objective-C之@encode关键字

参考资料:yhawaii的专栏       个人笔记  感谢博主!


@encode()

为了更好的互操作性,Objective-C 的数据类型,甚至自定义类型、函数或方法的元类型,都可以使用 ASCII 编码。@encode(aType) 可以返回该类型的 C 字符串(char *)的表示。


我们知道我们可以在程序中可以用OC对象 isKindOfClass:([OC类名 Class])方法来判断某个对象是否是某个类的实例。但是这个方法只能用在苹果公布了相应类的API的情况,对于int,float类型的,根本在OC中就没有相应的API。因此,这个时候要想知道哪个对象是否是int,float类型,就需要用到@encode关键字。


下面是一些类经过@encode(aType)转换后的char* 表示:

CodeMeaning
cchar
iAn int
sshort
llongl is treated as a 32-bit quantity on 64-bit programs.
qlong long
CAn unsigned char
IAn unsigned int
SAn unsigned short
LAn unsigned long
QAn unsigned long long
ffloat
ddouble
BA C++ bool or a C99 _Bool
vvoid
*A character string (char *)
@An object (whether statically typed or typed id)
#A class object (Class)
:A method selector (SEL)
[array type]An array
{name=type...}A structure
(name=type...)A union
bnumA bit field of num bits
^typeA pointer to type
?

NSLog(@"int        : %s", @encode(int));

    NSLog(@"long       : %s", @encode(long));

    NSLog(@"float      : %s", @encode(float));

    NSLog(@"float *    : %s", @encode(float*));

    NSLog(@"char       : %s", @encode(char));

    NSLog(@"char *     : %s", @encode(char *));

    NSLog(@"BOOL       : %s", @encode(BOOL));

    NSLog(@"void       : %s", @encode(void));

    NSLog(@"void *     : %s", @encode(void *));

    

    NSLog(@"NSObject * : %s", @encode(NSObject *));

    NSLog(@"NSObject   : %s", @encode(NSObject));

    NSLog(@"[NSObject] : %s", @encode(typeof([NSObject class])));

    NSLog(@"NSError * : %s", @encode(typeof(NSError *)));

    

    int intArray[5] = {1, 2, 3, 4, 5};

    NSLog(@"int[]      : %s", @encode(typeof(intArray)));

    

    float floatArray[3] = {0.1f, 0.2f, 0.3f};

    NSLog(@"float[]    : %s", @encode(typeof(floatArray)));

    

    typedef struct _struct {

        short a;

        long long b;

        unsigned long long c;

    } Struct;

    NSLog(@"struct     : %s", @encode(typeof(Struct)));

    

    /*

     结果:

     int        : i

     long       : l

     float      : f

     float *    : ^f

     char       : c

     char *     : *

     BOOL       : c

     void       : v

     void *     : ^v

     NSObject * : @

     NSObject   : {NSObject=#}

     [NSObject] : #

     NSError * : @

     int[]      : [5i]

     float[]    : [3f]

     struct     : {_struct=sqQ}

     */

An unknown type (among other things, this code is used for function pointers)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值