Objective-C中将结构体与联合体封装为NSValue对象
在Clang 3.7之前,Objective-C已经可以使用类似@100、@YES、@10.5f等字面量表示一个NSNumber对象;用类似@"xxx"的字面量表示一个NSString对象;用@[]字面量表示一个NSArray对象;用@{}字面量表示一个NSDictionary对象;用@(expr)字面量根据expr的类型来表示其对应的上述类型的其中之一,此外还包括一个类型——NSValue。
在Clang3.7中引入了__attribute__((objc_boxable))属性,如果我们定义的某一结构体或联合体用该属性修饰,那么此结构体或联合体即可用@()方式封装为一个NSValue对象。下面我们就来举一个简单的例子:
struct __attribute__((objc_boxable)) StructA
{
int a;
float f;
}; // 这里使用了C99中所引入的结构体复合字面量表达形式以及designated initializer
NSValue *value = @((struct StructA){.a = , .f = 0.5f}); struct StructA sa; [value getValue:&sa]; NSLog(@"The value is: %.1f", sa.a + sa.f);
上述代码中我们看到,一个结构体对象通过@()被封装为了一个NSValue对象。而我们可以使用NSValue类中的getValue方法将其所封装的结构体或联合体的内容完全返回出来。
Objective-C中将结构体与联合体封装为NSValue对象的更多相关文章
- Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型
Android For JNI(五)--C语言多级指针,结构体,联合体,枚举,自定义类型 我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了 一.多级指针 指针的概念我们在前面 ...
- android109 结构体,联合体,枚举,自定义
#include <stdio.h> #include <stdlib.h> void study(){ printf("吃饭睡觉打李志\n"); } // ...
- 【 转】 C/C++结构体和联合体的区别
联合体用途:使几个不同类型的变量共占一段内存(相互覆盖) 结构体是一种构造数据类型用途:把不同类型的数据组合成一个整体-------自定义数据类型 总结: 声明一个联合体: union abc { i ...
- C语言:结构体和联合体(共用体)
结构体:struct 1.结构体变量的首地址能够被其最宽基本类型成员的大小所整除. 2.结构体每个成员相对于结构体首地址的偏移量(offset)都是成员的整数倍. 3.结构体的总大小为结构体最宽基本类 ...
- C++-结构体,联合体,枚举,的区别
结构体: struct NUM { int number; }a; 结构体是声明只是一个模型,没有分配内存空间.当进行定义结构体变量后才分配内存空间 联合体: union data { int a ...
- C语言之结构体、联合体
结构体 1,结构体即为多个基本数据类型组合而成的数据类型.结构体本质上同int等一样同为数据类型,可以定义变量,内部成员不能直接赋值. struct Man { ; ; }; 上面是错误的.正确写法 ...
- Golang通过结构体解析和封装XML
Golang解析和封装XML 解析XML成结构体Demo package main import ( "encoding/xml" "fmt" ) //我们通过 ...
- [汇编与C语言关系]4. 结构体和联合体
用反汇编的方法研究一下C语言的结构体: #include <stdio.h> int main(int argc, char ** argv) { struct { char a; sho ...
- 【C++】结构体、联合体大小计算
struct结构体大小计算 struct A { char a; int b; char c; } 这个结构体中,char占据1字节,int占据4字节,char占据1字节,而这组数据结构的大小是12字 ...
随机推荐
- jsp_包含指令
1.静态包含: <%@ include file="被包含的文件的路径"%> 2.动态包含: 不传递参数:<jsp:include page="{要包含 ...
- 改变tableView索引颜色
_tableView.sectionIndexBackgroundColor = [UIColor clearColor]; _tableView.sectionIndexColor ...
- 删除xcode中的描述文件的路径
打开Finder commend + shift +g 进入文件夹 : ~/Library/MobileDevice/Provisioning Profiles 删除即可
- Python操作memcached及redis
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- Objective 笔记C(第二天)
属性本质 •什么是属性 在OC中,属性提供了setter和getter方法,本质上属性就是方法,属性的值是由实例变量来保存的. • 属性的本质(一般三个部分组成) a.保存属性值的实例变量int _a ...
- Upstart 1.10 发布,系统初始化守护进程
Upstart 是一个用以替换 /sbin/init 守护进程的软件,基于事件机制开发.可用来处理启动过程中的任务和服务启动. Upstart 1.10 发布,改进记录: New bridges: u ...
- C#的泛型委托与闭包函数
前些天Wendy问我说Func<T, ResultT>是个什么意思,初学C#都觉得这样的写法很奇葩,甚至觉得这样写有点诡异,其实以我来看,这是体现C#函数式编程的又一个亮点. 从MSDN上 ...
- Session为null无法访问
我们在一般处理程序中需要访问Session为null 无法访问和操作 处理方案: 1.导入命名空间 System.Web.SessionState 2.实现IRequiresSessionState ...
- UML中依赖(Dependency)和关联(Association)之间的区别
一般情况下,使用关联(association)来表示像类中的字段等.这个关系是始终存在的,因此你可以随时针对关联项进行访问调用,例如可以始终从 Customer 对象获取 Order 对象.但事实上它 ...
- Visual Studio Developer Assistant 3月新功能展示
Visual Studio Developer Assistant 3月添加了以下新功能: https://visualstudiogallery.msdn.microsoft.com/a116671 ...