Objective-C中将结构体与联合体封装为NSValue对象
2016-06-14 20:34
387 查看
在Clang 3.7之前,Objective-C已经可以使用类似@100、@YES、@10.5f等字面量表示一个NSNumber对象;用类似@"xxx"的字面量表示一个NSString对象;用@[]字面量表示一个NSArray对象;用@{}字面量表示一个NSDictionary对象;用@(expr)字面量根据expr的类型来表示其对应的上述类型的其中之一,此外还包括一个类型——NSValue。
在Clang3.7中引入了__attribute__((objc_boxable))属性,如果我们定义的某一结构体或联合体用该属性修饰,那么此结构体或联合体即可用@()方式封装为一个NSValue对象。下面我们就来举一个简单的例子:
上述代码中我们看到,一个结构体对象通过@()被封装为了一个NSValue对象。而我们可以使用NSValue类中的getValue方法将其所封装的结构体或联合体的内容完全返回出来。
在Clang3.7中引入了__attribute__((objc_boxable))属性,如果我们定义的某一结构体或联合体用该属性修饰,那么此结构体或联合体即可用@()方式封装为一个NSValue对象。下面我们就来举一个简单的例子:
struct __attribute__((objc_boxable)) StructA { int a; float f; }; // 这里使用了C99中所引入的结构体复合字面量表达形式以及designated initializer NSValue *value = @((struct StructA){.a = 10, .f = 0.5f}); struct StructA sa; [value getValue:&sa]; NSLog(@"The value is: %.1f", sa.a + sa.f);
上述代码中我们看到,一个结构体对象通过@()被封装为了一个NSValue对象。而我们可以使用NSValue类中的getValue方法将其所封装的结构体或联合体的内容完全返回出来。
相关文章推荐
- Object类源码解析
- Android Sharepreference保存Object或者ListObject
- Objective-C图片切圆角优化
- Xcode常用快捷键
- AFNetWorking之GET,POST,上传图片,下载文件进度监测
- 深入浅出Mybatis系列(六)---objectFactory、plugins、mappers简介与配置
- Javascript Object的使用方法 ( 内含遍历Object属性的操作!)
- tsql default values, check current isolation level, check db object last update time
- Training Region-based Object Detectors with Online Hard Example Mining
- ValueAnimator及ObjectAnimator的使用
- 用Qt Designer创建ui后,记得修改objectName
- Objective-C文件和目录操作,IOS文件操作,NSFileManager使用文件操作
- mock.patch.object方式写UT
- Python标准库:内置函数hasattr(object, name)
- Xcode报错Expected selector for Objective-C and Expected method body
- Objective-C --- - UITableView 三 自定义cell(梳理总结)
- XString在xml和Object之间来回转换时xml头声明问题
- iOS开发核心语言Objective C语言 —— 特有语法及设计模式
- 彻底解决 libhdf5_hl.so.10: cannot open shared object file: No such file or directory
- Objective-C method ‘application:didFinishLaunchingWithOptions: