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 ...
随机推荐
- 整合ssh model $$_javassist_13 cannot be cast to javassist.util.proxy.Proxy
经goole stackoverflow 发现是 javassit 包冲突 项目使用的是maven 检查依赖包
- Mina、Netty、Twisted一起学(三):TCP消息固定大小的前缀(Header)
在上一篇博文中,有介绍到用换行符分割消息的方法.但是这种方法有个小问题,如果消息中本身就包含换行符,那将会将这条消息分割成两条,结果就不对了. 本文介绍另外一种消息分割方式,即上一篇博文中讲的第2条: ...
- DDD:整理了一些关于验证方面的文章
http://msdn.microsoft.com/en-us/library/ff664356(v=pandp.50).aspx http://gorodinski.com/blog/2012/05 ...
- Understanding G1 GC Logs--转载
原文地址:https://blogs.oracle.com/poonam/entry/understanding_g1_gc_logs Understanding G1 GC Logs By Poon ...
- 移除了css框架,世界干净了
在之前的webapp项目里,我使用了bootstrap作为三方的css库,只调取了其中一部分源码的less使用,大部分代码仍然是自己写的. 自己的代码也是参照bootstrap的目录结构和它的一些规范 ...
- HMM 自学教程(四)隐马尔科夫模型
本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...
- gopush-cluster 架构
前言 gopush-cluster是一套golang开发的实时消息推送集群,主要分享一下开发这套系统的想法和思路. 架构 主要分为三个模块来开发,comet/web/message. comet 主要 ...
- Entity Framework优缺点及使用方法总结
Entity Framework是M$提供的一个ORM框架,它旨在为小型应用程序中数据层的快速开发提供便利. nuget上185W多的下载量,说明.Net开发人员还是比较喜欢用EF的.但是EF在提供了 ...
- Scrum1.2--spring计划
项目功能--深入分析 燃尽图
- Scrum团队
5.Scrum团队成立 5.1 团队名称,团队目标.团队口号.团队照: 团队名称:@four! 团队目标:做出像“数学口袋精灵”那么棒的软件 团队口号:多劳多得 团队照: 5.2 角色分配 产品负责人 ...