TAG

RSS订阅

收藏本站

设为首页

当前位置:主页 > 移动开发 > IOS开发 >

Objective-C中@encode的使用,objective-c@encode

发布时间:2016-12-21 22:13 类别:IOS开发

Objective-C中@encode的使用,objective-c@encode


今天看Mansonry的代码时,碰到一个生僻的关键字(也许只是自己没用过)。:-)

 

@encode  => 将给定类型编码为内部表示的字符串。

为了方便自己查阅,顺便也写个小例子,贴在这里,实践出真知嘛。

 

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

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

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

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

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

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

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

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

 

    NSDictionary *numberDic = @{@"double"  : [NSNumber numberWithDouble:1.00f],

                                @"float"   : [NSNumber numberWithFloat:2.0f],

                                @"int"     : [NSNumber numberWithInt:2],

                                @"long"    : [NSNumber numberWithLong:2],

                                @"bool"    : [NSNumber numberWithBool:YES],

                                @"short"   : [NSNumber numberWithShort:2],

                                };

    for(NSString *key in numberDic){

        NSNumber* value = [numberDic valueForKey:key];

        const char * pObjCType = [value objCType];

        if (strcmp(pObjCType, @encode(double))  == 0) {

            NSLog(@"double : %@", value);

        }

        if (strcmp(pObjCType, @encode(float))  == 0) {

            NSLog(@"float : %@", value);

        }

        if (strcmp(pObjCType, @encode(int))  == 0) {

            NSLog(@"int : %@", value);

        }

        if (strcmp(pObjCType, @encode(long))  == 0) {

            NSLog(@"long : %@", value);

        }

        if (strcmp(pObjCType, @encode(bool))  == 0) {

            NSLog(@"bool : %@", value);

        }

        if (strcmp(pObjCType, @encode(short))  == 0) {

            NSLog(@"short : %@", value);

        }

    }

 

这段代码的输出如下:

2016-11-04 16:18:56.316 test[10003:251554] UIViewController : {UIViewController=#}

2016-11-04 16:18:56.316 test[10003:251554] CGRect : {CGRect={CGPoint=dd}{CGSize=dd}}

2016-11-04 16:18:56.316 test[10003:251554] int : i

2016-11-04 16:18:56.316 test[10003:251554] float : f

2016-11-04 16:18:56.316 test[10003:251554] double : d

2016-11-04 16:18:56.317 test[10003:251554] BOOL : B

2016-11-04 16:18:56.317 test[10003:251554] long : q

2016-11-04 16:18:56.317 test[10003:251554] short : s

2016-11-04 16:18:57.268 test[10003:251554] double : 1

2016-11-04 16:18:57.268 test[10003:251554] float : 2

2016-11-04 16:18:57.268 test[10003:251554] int : 2

2016-11-04 16:18:57.268 test[10003:251554] long : 2

2016-11-04 16:18:57.269 test[10003:251554] short : 2

 

从上我们看出 int 被编码为 i;float为f;等等。

这里遇到一个问题: [NSNumber numberWithBool:YES] 在调用 objCType 方法时,返回的是"c", 而不是"B", 所以下面的if判断并没有打印bool相关的输出。 针对这个问题,我做了查找,"B"表示的是一个C++ bool,Ojbective-C中BOOL确切的说是singned char, 所以调用objCType时返回的是"c"。

猜你会喜欢....

Copyright © 2015 www.wahenzan.com 哇!很赞 版权所有 浙ICP备14030256号-1 Power by DedeCms

浙公网安备 33010602005986号

声明:本站所有文章除标明原创外,均来自网络转载,版权归原作者所有,如果有侵犯到您的权益,请联系本站删除 网站管理员:758763728

360网站安全检测平台