前言

	@interface NSValue : NSObject <NSCopying, NSSecureCoding>
  • 将任意数据类型包装成 OC 对象

1、比较两个 NSValue 类型数据的大小

	NSValue *value1 = [NSValue valueWithPoint:NSMakePoint(10, 32)];
NSValue *value2 = [NSValue valueWithPoint:NSMakePoint(10, 32)]; // isEqualToValue
BOOL bl = [value1 isEqualToValue:value2]; if (bl) {
NSLog(@"value1 == value2");
} else {
NSLog(@"value1 != value2");
}

2、NSValue 与 OC 数据类型的相互转换

	// 将 OC 数据类型转换成 NSValue
NSValue *value1 = [NSValue valueWithPoint:NSMakePoint(10, 32)]; // 将 NSValue 转换成 OC 数据类型
NSPoint point = [value1 pointValue];
NSLog(@"x: %.0f, y: %.0f", point.x, point.y);

3、NSValue 与 自定义数据类型 的相互转换

	// 将 自定义数据类型 转换成 NSValue

		// 自定义结构体
typedef struct { int year; int month; int day; } MyDate; MyDate date = {2016, 1, 11}; // 取要转换的数据的地址
void *valueAdd = &date; // 将自定义数据类型装换成 C 语言字符串
char *objCType = @encode(MyDate); // 对象方法,将自定义数据类型转换成 NSValue
NSValue *value2 = [[NSValue alloc] initWithBytes:valueAdd objCType:objCType]; // 类方法,将自定义数据类型转换成 NSValue
NSValue *value3 = [NSValue valueWithBytes:&date objCType:@encode(MyDate)]; // 将 NSValue 转换成 自定义数据类型 MyDate date1;
MyDate date2; // 从 NSValue 中取出的值放到 &date1 中
[value2 getValue:&date1]; // 从 NSValue 中取出的值放到 &date2 中
[value3 getValue:&date2]; NSLog(@"%i, %i, %i", date1.year, date1.month, date1.day);
NSLog(@"%i, %i, %i", date2.year, date2.month, date2.day); // 从 NSValue 中取出自定义的数据类型
const char *type = [value2 objCType]; NSLog(@"%@", [NSString stringWithUTF8String:type]);

iOS - OC NSValue 值的更多相关文章

  1. iOS - Swift NSValue 值

    前言 public class NSValue : NSObject, NSCopying, NSSecureCoding 将任意数据类型包装成对象. 1.比较两个 NSValue 类型数据的大小 l ...

  2. iOS - OC 面向对象语法

    1.类 1)根类:因为类 NSObject 是层次结构的最顶层,因此称为根类. 可以将类称为子类(subclass)和父类(superclass),也可以将类称为子类和超类. 2)分类/类别(cate ...

  3. ios+oc面试题

    ios+oc面试题     浅复制和深复制的区别?//浅拷贝和深拷贝答案:浅层复制(copy):只复制指向对象的指针,而不复制引用对象本身.//通过对象的指针来访问这个对象深层复制(mutableCo ...

  4. 原 IOS之NSValue整理

    原 IOS之NSValue整理 发表于2年前(2013-02-28 23:02)   阅读(1974) | 评论(0) 5人收藏此文章, 我要收藏 赞3 IOS NSValue 值对象(value o ...

  5. ios 把毫秒值转换成日期 NSDate

    ios 把毫秒值转换成日期 (比较好用) 1343359790000 这是毫秒值------最佳解决方案-------------------- long long time=134335979000 ...

  6. iOS OC语言原生开发的IM模块--RChat

    iOS OC语言原生开发的IM模块,用于项目中需要原生开发IM的情况,具备发送文字.表情.语音.图片.视频等完整功能,包含图片预览视频播放等功能,此项目将会长期更新如有问题可以提出,我的邮箱:fshm ...

  7. iOS - OC RunTime 运行时

    1.运行时的使用 向分类中添加属性 // 包含运行时头文件 #import <objc/runtime.h> /* void objc_setAssociatedObject(id obj ...

  8. iOS - OC Category 分类

    1.Category 1)分类/类别(category): 允许以模块的方式向现有类定义添加新的方法(默认不能添加实例变量).用以扩展自己或他人以前实现的类,使它适合自己的需要. 分类的名称括在类名之 ...

  9. iOS - OC 语言新特性

    前言 相对于 Java,OC 语言是一门古老的语言了,而它又是一门不断发展完善的语言.一些新的编译特性,为 OC 语言带来了许多新的活力.在 Xcode7 中,iOS9 的 SDK 已经全面兼容了 O ...

随机推荐

  1. IOS 音频开发文件大小计算

    音频基础知识 音频文件计算大小 音频转码 标签(空格分隔): 调查 IOS音频 https://developer.apple.com/library/ios/documentation/MusicA ...

  2. sqlite3内存不断增加的原因

    数据库是这样设计的:用内存保存数据,以提高增删查改的速度,同时把数据写入磁盘,让数据落地. 如果不删除数据库里的数据,随着数据不断地添加到数据库,数据库越来越大,RES内存也越来越大. 见测试代码a. ...

  3. jquery+thinkphp实现跨域抓取数据的方法

    jquery的$.post发送数据到服务器后台,在由后台的PHP代码执行远程抓取,存到数据库ajax返回数据到前台,前台用JS接受数据并显示. //远程抓取获取数据$("#update_ac ...

  4. 关于ADO.NET@SQL Server&SqlDataReader

    先说基础的,说基础的明白了再深的也是一样的.SQL是关系型数据库,所以就决定了对其操作的时候ADO的一些类要相互联系,Connection 类Command对象(ExecuteReader()方法.E ...

  5. Lucas定理模板

    用于大组合数对p取模的计算. #include <cstdio> #include <iostream> #include <cmath> #include < ...

  6. 1. python中的随机函数

         本系列不会对python语法,理论作详细说明:所以不是一个学习教材:详细查考Vamei 大神:通俗易懂:是一个很好(基础-中级-高级)的学习教程.而这里只是我一个学习python的某些专题的 ...

  7. 使用 MNIST 图像识别数据集

    机器学习领域中最迷人的主题之一是图像识别 (IR). 使用红外系统的示例包括使用指纹或视网膜识别的计算机登录程序和机场安全系统的扫描乘客脸寻找某种通缉名单上的个人.MNIST 数据集是可用于实验的简单 ...

  8. Paratroopers

    Paratroopers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7881 Accepted: 2373 Descript ...

  9. Hangover 分类: POJ 2015-06-11 10:34 12人阅读 评论(0) 收藏

    Hangover Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 108765   Accepted: 53009 Descr ...

  10. Unity中HDR外发光的使用

    1.使用标准材质,设置好Emission外发光 2.Camera下打开HDR,加上Bloom特效 最终效果 如果只勾选HDR,只会有高光感,不会有外发光 注意,正向光照下打开HDR不可用抗锯齿,否则切 ...