zoukankan      html  css  js  c++  java
  • 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 = 10, .f = 0.5f});
        
        struct StructA sa;
        
        [value getValue:&sa];
        
        NSLog(@"The value is: %.1f", sa.a + sa.f);

    上述代码中我们看到,一个结构体对象通过@()被封装为了一个NSValue对象。而我们可以使用NSValue类中的getValue方法将其所封装的结构体或联合体的内容完全返回出来。

  • 相关阅读:
    二分法
    php冒泡排序
    php位运算
    php学习函数如何执行的
    php学习 打星星
    小程序的学习备注
    一个IP与多个域名绑定
    apache、mysql、php核心、phpmyadmin的安装及相互关联
    php虚拟主机配置( 输入网址 对应 ip地址)
    ORA-01084: OCI 调用中的参数无效
  • 原文地址:https://www.cnblogs.com/zenny-chen/p/5585371.html
Copyright © 2011-2022 走看看