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 ...
随机推荐
- css3 画圆记录
<style> .radar-wrapper * { -moz-box-sizing: border-box; box-sizing: border-box; margin:; paddi ...
- vmware虚拟机工具vmware tools介绍及安装排错
VMware Tools是VMware虚拟机中自带的一种增强工具,相当于VirtualBox中的增强功能(Sun VirtualBox Guest Additions),是VMware提供的增强虚拟显 ...
- java中子类与父类中隐含的this引用的分析
/* 看一下下面的程序,看是否你的答案和运行的答案是否一致! */ class Parent{ public int x; public Parent p; public Parent(){} pub ...
- LDPC编译码基本原理
LDPC编译码基本原理 学习笔记 V1.1 2015/02/18 LDPC编译码基本原理 概述 本文是个人针对LDPC的学习笔记,主要针对LDPC译码算法做了简要的总结.该版本主要致力 ...
- 自定义能够for each的类,C#,Java,C++,C++/cli的实现方法
自定义类能够被for each,应该算是个老生常谈的话题了,相关的资料都很多,不过这里整理总结主流语言的不同实现方式,并比较部分细节上的差异. 第一种语言,也是实现起来最简单的Java语言.在Java ...
- VirtualBox的网络设置(6种方式)
VirtualBox 可以为每一个虚拟机分配8个网卡.每一个网卡的连接方式可以选为下列之一: Not attached Network Address Translation (NAT) Bridge ...
- 字符编码(ASCII,Unicode和UTF-8) 和 大小端
本文包括2部分内容:“ASCII,Unicode和UTF-8” 和 “Big Endian和Little Endian”. 第1部分 ASCII,Unicode和UTF-8 介绍 1. ASCII码 ...
- [Solution] 简单数字识别之Tesseract
图像识别涉及的理论:傅里叶变换,图形形态学,滤波,矩阵变换等等. Tesseract的出现为了解决在没有这些复杂的理论基础,快速识别图像的框架. 准备: 1.样本图像学习,预处理 (平均每1个元素出现 ...
- CSS 最核心的四个概念
本文将讲述 CSS 中最核心的几个概念,包括:盒模型.position.float等.这些是 CSS 的基础,也是最常用的几个属性,它们之间看似独立却又相辅相成.为了掌握它们,有必要写出来探讨一下,如 ...
- DataGridView隐藏列用CSS实现
隐藏DataGridView某一列,用CSS控制 CSS Code: .hidden{ display:none;} c# Code: <asp:BoundField DataField=&qu ...