今天看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. Windows上使用clang编译

    - 先自己从源代码 (http://llvm.org/releases/) 编译llvm和clang,或者直接安装clang for Windows - 测试过使用cygwin (https://cy ...

  2. CSS选择器、优先级与匹配原理

    为了分析Bootstrap源码,所以的先把CSS选择器相关的东东给巩固好 废话就不多说了 CSS 2.1 selectors, Part 1 计算指定选择器的优先级:重新认识CSS的权重 标签的权值为 ...

  3. (转载)Linux 套接字编程中的 5 个隐患

    在 4.2 BSD UNIX® 操作系统中首次引入,Sockets API 现在是任何操作系统的标准特性.事实上,很难找到一种不支持 Sockets API 的现代语言.该 API 相当简单,但新的开 ...

  4. [转载]百度编辑器-Ueditor使用

    前段时间发表过一篇关于“KindEditor在JSP中使用”的博文.这几天在沈阳东软进行JavaWeb方面的实习工作,在一个CMS系统的后台和博客板块中又要用到文本编辑器,突然发现了这个——百度编辑器 ...

  5. iOS-动画效果(首尾式动画,代码快动画,核心动画,序列帧动画)

    一.各个动画的优缺点 1.首尾动画:如果只是修改空间的属性,使用首尾动画比较方便,如果在动画结束后做后续处理,就不是那么方面了. 2.核心动画:有点在于对后续的处理方便. 3.块动画: (1)在实际的 ...

  6. 敏捷个人微信号:AgileMe ,欢迎大家推广和关注

  7. Mysql学习笔记(十四)备份与恢复

    学习内容: 1.数据库的重要数据备份... 2.什么时候需要使用到数据库备份.. 3.如何恢复备份的数据.. 1.备份: 说到备份,相比大家都不应该陌生,比如说我们平时在为我们的电脑重新做系统的时候, ...

  8. CentOS6.5菜鸟之旅:安装Realtek无线网卡驱动

    一.前言 CentOS6.5不像CentOS7和Unbuntu那样自动安装好了无线网卡驱动,因此需要我们折腾一下. 二.安装前的准备工作   [a] 检查无线网卡驱动的安装情况(通过查看网络接口的安装 ...

  9. Mybatis 中在传参时,${} 和#{} 的区别

    介绍 MyBatis中使用parameterType向SQL语句传参,parameterType后的类型可以是基本类型int,String,HashMap和java自定义类型. 在SQL中引用这些参数 ...

  10. dictionary 添加数据

    var empList = from p in customers select new { p.Personnel_ID, p.PersonName }; var empTempList = emp ...