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"。
Objective-C中@encode的使用的更多相关文章
- 理解Objective C 中id
什么是id,与void *的区别 id在Objective C中是一个类型,一个complier所认可的Objective C类型,跟void *是不一样的,比如一个 id userName, 和vo ...
- 浅谈Objective—C中的面向对象特性
Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...
- objective C中的字符串NSStirng常用操作
objective C中的字符串操作 在OC中创建字符串时,一般不使用C的方法,因为C将字符串作为字符数组,所以在操作时会有很多不方便的地方,在Cocoa中NSString集成的一些方法,可以很方便的 ...
- Objective C中的ARC的修饰符的使用---- 学习笔记九
#import <Foundation/Foundation.h> @interface Test : NSObject /** * 默认的就是__strong,这里只是做示范,实际使用时 ...
- Objective - C中属性和点语法的使用
一.属性 属性是Objective—C 2.0定义的语法,为实例变量提供了setter.getter方法的默认实现能在一定程度上简化程序代码,并且增强实例变量的访问安全性 ...
- python3 中encode 和decode的使用方法。
编码: 将文本转换成字节流的过程.即Unicode----------->特定格式的编码方式,产生特定的字节流保存在硬盘中(一般为utf-8格式). 解码: 将硬盘中的字节流转换成文本的过程.即 ...
- Objective C中数组排序几种情况的总结
总结OC中数组排序3种方法:sortedArrayUsingSelector:;sortedArrayUsingComparator:;sortedArrayUsingDescriptors: 数组排 ...
- js中encode、decode的应用说明
escape 方法 返回一个可在所有计算机上读取的编码 String 对象. function escape(charString : String) : String 参数 charString 必 ...
- Objective C中nil/Nil/NULL的区别
nil:指向oc中对象的空指针 Nil:指向oc中类的空指针 NULL:指向其他类型的空指针,如一个c类型的内存指针 NSNull:在集合对象中,表示空值的对象 若obj为nil:[obj messa ...
随机推荐
- MyBatis知多少(8)关系型数据库
MyBatis的存在就是为了简化对关系数据库的访问.数据库的确非常复杂,要正确地使用它们需要做很多的工作.数据库负责管理数据和修改数据.我们使用数据库而不简简单单地使用一个 平板文件的原因就在于数据库 ...
- WCF安全3-Transport与Message安全模式
概述: WCF的安全传输主要涉及认证.消息一致性和机密性三个主题.WCF采用两种不同的机制来解决这三个涉及传输安全的问题,一般将它们成为不同的安全模式,即Transport安全模式和Message安全 ...
- AutoMapper用法一瞥
前段时候做个小项目用到了autoMapper(参考了NOP里的用法),感觉还行,用起来挺方便的.首先复杂的东西我就不说了,至于详细的教程我也就不写了,比较园子里有很多这样的文章,我就分享下,在项目中实 ...
- linux常见进程与内核线程
发现大量jdb2进程占用io资源.jdb2进程是一个文件系统的写journal的进程 kthreadd:这种内核线程只有一个,它的作用是管理调度其它的内核线程.它在内核初始化的时候被创建,会循环运行一 ...
- 轻松认识JVM运行时数据区域(使用思维导图)
下面是个人阅读周志明编写的深入浅出Java虚拟机做成思维导图的笔记,线条.颜色和图片的视觉印象比起单纯文字笔记好得太多了,文字笔记的枯燥以及硬性记忆我就不再多说,特别对于JVM这块略微有点枯燥的知识, ...
- node生成自定义命令(yargs/commander)
第一部分可以生成一个自定义命令,例如常见的”express”,yargs和commander则可以在生成的自定义命令上做扩展,yargs将命令扩展成类似express --l xx的形式;而comma ...
- SQL查询作业执行情况
查询作业的执行情况sql: SELECT [JobName] = JOB.name, [Step] = HIST.step_id, [StepName] = HIST.step_name, [Mess ...
- HDFS Append时packet的格式以及DataNode对block/checksum文件的处理
HDFS Append时packet的格式以及DataNode对block/checksum文件的处理 HDFS的Block一般比较大,默认64MB/128MB,客户端给DataNode发数据实际上是 ...
- Asp.NET MVC JSON序列化问题
最近在做项目的时候遇到一个JSON序列化问题. 环境:ASP.NET MVC 4.0 数据库:SQL 2008 在将获取的数据从后台以json的形式传给前台的easyui treegrid绑定的时候通 ...
- Tesseract-OCR引擎 入门
OCR(Optical Character Recognition):光学字符识别,是指对图片文件中的文字进行分析识别,获取的过程. Tesseract:开源的OCR识别引擎,初期Tesseract引 ...