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 ...
随机推荐
- 浅析Objective-C的copy
一直对NSObject的copy方法似懂非懂,今天工作做完了,整理一下 深复制和浅复制是什么在这里就不赘述 今天主要分三种类型对copy进行探讨:系统非容器类对象.系统容器类对象和自定义对象 系统非容 ...
- 用Python开始机器学习(7:逻辑回归分类) --好!!
from : http://blog.csdn.net/lsldd/article/details/41551797 在本系列文章中提到过用Python开始机器学习(3:数据拟合与广义线性回归)中提到 ...
- ruby -- 基础学习(四)TimeDate处理
TimeDate格式化输出: DateTime.parse(Time.now.to_s).strftime('%Y-%m-%d %H:%M:%S').to_s #就是按照2013-8-16 16:4 ...
- Java 时间日期系列目录
下面是Java的时间和日期相关文章目录: 01. Java Calendar,Date,DateFormat,TimeZone,Locale等时间相关内容的认知和使用(1) Calendar 02. ...
- Spring Remoting: Burlap--转
原文地址:http://www.studytrails.com/frameworks/spring/spring-remoting-burlap.jsp Concept Overview In the ...
- 【转载】解决 Subversion 的 “svn: Can't convert string from 'UTF-8' to native encoding” 错误
转载自:http://blog.csdn.net/shaohui/article/details/3996274 在google code 上创建了一个新的项目, 用Windows 下面的tortoi ...
- iOS-AFNetworking-上传图片
一.AFNetworking上传图片 /** 需要Demo,可留言 */ 1.利用AFnetworking上传图片. 2.注意将UIImage类型转化为NSData类型,传给后台. 二.Demo // ...
- Android Logcat 封装类
简单日志封装类: public final class CLog { public static final boolean DEBUG = true; private CLog() { } publ ...
- python之异常处理
异常处理是高级编程语言必备的一个功能模块. 一.异常基础 在编程过程中为了增加友好性.容错性和健壮性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大 ...
- MySqlConnection 并发连接的问题
最近在做项目的过程中遇到一个MySql在并发时初始化的问题,场景是这样子的: 我在Job中设定在同一时间点启动多个操作来访问数据库更新数据,结果在创建连接的时候抛出下面的问题: Note that w ...