今天看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"。

Objective-C中@encode的使用的更多相关文章

  1. 理解Objective C 中id

    什么是id,与void *的区别 id在Objective C中是一个类型,一个complier所认可的Objective C类型,跟void *是不一样的,比如一个 id userName, 和vo ...

  2. 浅谈Objective—C中的面向对象特性

    Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...

  3. objective C中的字符串NSStirng常用操作

    objective C中的字符串操作 在OC中创建字符串时,一般不使用C的方法,因为C将字符串作为字符数组,所以在操作时会有很多不方便的地方,在Cocoa中NSString集成的一些方法,可以很方便的 ...

  4. Objective C中的ARC的修饰符的使用---- 学习笔记九

    #import <Foundation/Foundation.h> @interface Test : NSObject /** * 默认的就是__strong,这里只是做示范,实际使用时 ...

  5. Objective - C中属性和点语法的使用

    一.属性        属性是Objective—C 2.0定义的语法,为实例变量提供了setter.getter方法的默认实现能在一定程度上简化程序代码,并且增强实例变量的访问安全性         ...

  6. python3 中encode 和decode的使用方法。

    编码: 将文本转换成字节流的过程.即Unicode----------->特定格式的编码方式,产生特定的字节流保存在硬盘中(一般为utf-8格式). 解码: 将硬盘中的字节流转换成文本的过程.即 ...

  7. Objective C中数组排序几种情况的总结

    总结OC中数组排序3种方法:sortedArrayUsingSelector:;sortedArrayUsingComparator:;sortedArrayUsingDescriptors: 数组排 ...

  8. js中encode、decode的应用说明

    escape 方法 返回一个可在所有计算机上读取的编码 String 对象. function escape(charString : String) : String 参数 charString 必 ...

  9. Objective C中nil/Nil/NULL的区别

    nil:指向oc中对象的空指针 Nil:指向oc中类的空指针 NULL:指向其他类型的空指针,如一个c类型的内存指针 NSNull:在集合对象中,表示空值的对象 若obj为nil:[obj messa ...

随机推荐

  1. CentOS 6.4 快速安装Nginx笔记

    CentOS 6.4 快速安装Nginx笔记 本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/ex_net/article/details/9860 ...

  2. 2014 网选 5024 Wang Xifeng's Little Plot

    题意:从任意一个任意一个可走的点开始找一个最长的路,这条路如果有转弯的话, 那么必须是 90度,或者没有转弯! 思路: 首先用dfs将所有可走点开始的 8 个方向上的线段的最长长度求出来 ! step ...

  3. Android的Activity生命周期

    Android的Activity就相当于Windows Form中的Form,它的创建和销毁也是有一个生命周期的.主要经过这么7个阶段:   创建Activity:onCreate() 启动Activ ...

  4. SQL Server 诊断查询-(3)

    Query #27 Database Properties    -- Recovery model, log reuse wait description, log file size, log u ...

  5. “康园圈--互联网+校园平台“项目之Sprint3

    sprint3任务列表 1.部署项目内测版上线,并绑定相应域名. 2.添加测试用的模拟数据. 3.写已实现功能及效果汇报文档. 4.写项目总结博客. 5.记录并分析用户反馈. 看板动态 第一次 第二次 ...

  6. ADO.NET ExcuteReader复习

    private void Button_Click(object sender, RoutedEventArgs e) { //ADO.NET 连接方式查询数据库 ExcuteReader执行查询 / ...

  7. vs2015 Android SDK

    It was not possible to complete an automatic installation. This might be due to a problem with your ...

  8. 树莓派配置静态ip

    #vim /etc/network/interfaces 修改为如下内容: auto eth0 iface eth0 inet static address 192.168.0.2 netmask 2 ...

  9. AJAX使用技巧:如何处理书签和翻页按扭

    本篇文章提供了一个开源JavaScript库,它提供了给AJAX应用程序中添加书签和会退按钮的功能.在学习完这个教程后,开发者将能够对开发AJAX应用碰到的问题获得一个解决方案,这个特性甚至Googl ...

  10. C#函数、参数数组(例子)★

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...