NSValue

前言

  • 将任意数据类型包装成 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]);
posted @   CH520  阅读(302)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示
哥伦布
08:13发布
哥伦布
08:13发布
2°
西北风
4级
空气质量
相对湿度
89%
今天
小雪
0°/6°
周日
2°/12°
周一
4°/15°