NSValue

简介: 如何将非OC对象封装成OC对象,塞给数组等 1 // 2 // main.m 3 // NSValue 4 // 5 // Created by dingxiaowei on 13-5-17.

如何将非OC对象封装成OC对象,塞给数组等

复制代码
 1 //
 2 //  main.m
 3 //  NSValue
 4 //
 5 //  Created by dingxiaowei on 13-5-17.
 6 //  Copyright (c) 2013年 dingxiaowei. All rights reserved.
 7 //
 8 
 9 #import <Foundation/Foundation.h>
10 
11 //创建NSValue
12 void value(){
13     //创建一个point结构体,这个不是OC对象
14     CGPoint point=CGPointMake(10, 10);
15     //将结构体变量包装成一个对象
16     NSValue *value=[NSValue valueWithPoint:point];
17     //创建一个数组
18     NSMutableArray *array=[NSMutableArray array];
19     //将包装好的value放入数组中
20     [array addObject:value];  //添加这个对象的时候,做一次retain操作
21 
22     //取出这个对象
23     value=[array lastObject];
24     //将NSValue对象转化成CGPoint结构体
25     CGPoint point2=[value pointValue];
26     //比较验证(比较取出来的对象跟之前的对象是否相同)
27     BOOL result = CGPointEqualToPoint(point2, point);
28     if(result==1){
29         NSLog(@"point=point2");
30     }
31     else{
32         NSLog(@"point!=point2");
33     }
34     //直接打印输出结构体
35     NSString *str=NSStringFromPoint(point2);
36     NSLog(@"取出来的point是:%@",str);
37 }
38 
39 //宏定义
40 typedef struct {
41     int year;
42     int month;
43     int day;
44 } Date;
45 //将自定义的结构体塞到数组中
46 void value2(){
47     Date date={2013,5,17};
48     //NSLog(@"输入的date是:%i年%i月%i日",date.year,date.month,date.day);
49     //void *代表任何类型的指针,这里第一个参数要传一个void *类型(即这个date的地址)
50     //第二个参数是指这个数据的类型,char *是一个C语言类型的char类型的指针,@encode根据结构体类型,生成对于的类描述字符串
51     char *type=@encode(Date);
52     NSValue *value=[NSValue value:&date withObjCType:type];//这样就能成功的将一个结构体类型包装成一个OC对象
53     //取出包装好的结构体
54     //定义一个结构体变量
55     Date date1;
56     [value getValue:&date1];//将包装的结构体取出来,赋给date1,经过这个方法调用之后,date1里面就有值了
57     //取出类型描述字符串
58     //[value objCType]; //这里就等同于上面的type
59     //直接打印输出结构体
60     //NSString *str=NSStringFromPoint(date1);  //由于不是使用的系统内置的结构体,所以不好使用它封装好的方法
61     NSLog(@"取出来的date1是:%i年%i月%i日",date1.year,date1.month,date1.day);
62 }
63 
64 int main(int argc, const char * argv[])
65 {
66 
67     @autoreleasepool {
68         
69         //NSNumber只能包装数字,NSValue能包装所有的对象,如果我们向包装一个结构体,那就不能用NSNumber,只能用NSValue
70         //value();
71         value2();
72     }
73     return 0;
74 }
复制代码
相关文章
|
5月前
|
IDE Java Maven
Spring Boot项目搭建流程
Spring Boot项目搭建流程
|
8天前
|
NoSQL Cloud Native Redis
Redis核心开发者的新征程:阿里云与Valkey社区的技术融合与创新
阿里云瑶池数据库团队后续将持续参与Valkey社区,如过往在Redis社区一样耕耘,为开源社区作出持续贡献。
Redis核心开发者的新征程:阿里云与Valkey社区的技术融合与创新
|
8天前
|
关系型数据库 分布式数据库 数据库
PolarDB闪电助攻,《香肠派对》百亿好友关系实现毫秒级查询
PolarDB分布式版助力《香肠派对》实现百亿好友关系20万QPS的毫秒级查询。
PolarDB闪电助攻,《香肠派对》百亿好友关系实现毫秒级查询
|
9天前
|
消息中间件 Cloud Native Serverless
RocketMQ 事件驱动:云时代的事件驱动有啥不同?
本文深入探讨了云时代 EDA 的新内涵及它在云时代再次流行的主要驱动力,包括技术驱动力和商业驱动力,随后重点介绍了 RocketMQ 5.0 推出的子产品 EventBridge,并通过几个云时代事件驱动的典型案例,进一步叙述了云时代事件驱动的常见场景和最佳实践。
116792 2
|
10天前
|
弹性计算 安全 API
访问控制(RAM)|云上安全使用AccessKey的最佳实践
集中管控AK/SK的生命周期,可以极大降低AK/SK管理和使用成本,同时通过加密和轮转的方式,保证AK/SK的安全使用,本次分享为您介绍产品原理,以及具体的使用步骤。
101873 3
|
6天前
|
物联网 PyTorch 测试技术
手把手教你捏一个自己的Agent
Modelscope AgentFabric是一个基于ModelScope-Agent的交互式智能体应用,用于方便地创建针对各种现实应用量身定制智能体,目前已经在生产级别落地。
|
9天前
|
自然语言处理 Cloud Native Serverless
通义灵码牵手阿里云函数计算 FC ,打造智能编码新体验
近日,通义灵码正式进驻函数计算 FC WebIDE,让使用函数计算产品的开发者在其熟悉的云端集成开发环境中,无需再次登录即可使用通义灵码的智能编程能力,实现开发效率与代码质量的双重提升。
95448 3
|
2天前
|
机器人 Linux API
基于Ollama+AnythingLLM轻松打造本地大模型知识库
Ollama是开源工具,简化了在本地运行大型语言模型(ile优化模型运行,支持GPU使用和热加载。它轻量、易用,可在Mac和Linux上通过Docker快速部署。AnythingLLM是Mintplex Labs的文档聊天机器人,支持多用户、多种文档格式,提供对话和查询模式,内置向量数据库,可高效管理大模型和文档。它也是开源的,能与Ollama结合使用,提供安全、低成本的LLM体验。这两款工具旨在促进本地高效利用和管理LLMs。
39832 19
|
1天前
|
人工智能 自然语言处理 API
Claude3是什么?
Claude 3最近备受各大媒体瞩目,成为了AI领域备受关注的新宠。在ChatGPT推出更高版本之前,Claude 3已经被公认为是语言类AI工具中的佼佼者,特别在处理逻辑性和长篇上下文方面表现突出。然而,与此同时,Claude 3的注册流程也备受诟病,被认为是所有AI工具中最为复杂的之一。 这篇内容教大家 注册Claude 3 以及升级 教程。
13674 1
Claude3是什么?
|
2天前
|
NoSQL Java Redis
使用Redis实例搭建网上商城的商品相关性分析程序
本教程将指导您如何快速创建实例并搭建网上商城的商品相关性分析程序。(ApsaraDB for Redis)是兼容开源Redis协议标准的数据库服务,基于双机热备架构及集群架构,可满足高吞吐、低延迟及弹性变配等业务需求。
17124 0