美文网首页
IOS 结构体与位域

IOS 结构体与位域

作者: wpf_register | 来源:发表于2021-01-28 11:25 被阅读0次

参考链接

结构体

定义

// 结构体类型名 StudentScore
struct StudentScore {
    int stuNo;
    int stuMath;
    int stuEnglish;
    int stuChinese;
};
    // 创建stu结构体信息
    struct StudentScore st1 = {1, 98, 96, 87};
    // 结构体值的调用
    NSLog(@"st1:%d,%d,%d,%d",st1.stuNo,st1.stuMath,st1.stuEnglish,st1.stuChinese);

typedef 定义struct

// 使用typedef来定义结构体
typedef struct StudentScore2 { // 此处的StudentScore2可以直接删除不写
    int stuNo;
    int stuMath;
    int stuEnglish;
    int stuChinese;
} studentScore2;

    studentScore2 st2 = {2, 95, 88, 98};
    NSLog(@"st2:%d,%d,%d,%d",st2.stuNo,st2.stuMath,st2.stuEnglish,st2.stuChinese);

定义结构体时,如果不涉及到OC中的对象时,可以直接将结构体当作成员变量属性使用。
但在结构体中定义了OC中的对象,编译会报错,提示“ARC时禁止在结构体中定义OC的对象”,
主要原因在于ARC无法管理结构体中的OC对象的生命周期以内存。

ARC在是编译器特性,编译时在合适的位置插入对象的内存管理代码。由于标准的C语言结构体struct没有析构函数,编译器无法在合适的位置插入内存管理代码,从而导致内存泄漏。

因此在ARC项目中,
如果没有做特殊处理,
在结构体中成员变量全部用基本数据类型,
不能声明OC对象,
除非明确指出放弃对该对象的内存管理权限,例如将对象定义为 __unsafe_unretain

位域

typedef struct {
    unsigned int second: 6;
    unsigned int minute: 6;
    unsigned int hour: 5;
    unsigned int day:5;
    unsigned int month :4;
    unsigned int year: 6;
}testStruct;

位域的定义形式为:类型说明符号 位域名:位域长度
**长度单位是bit,而不是字节
**位域是从低位向最高位分配内存的

相关文章

  • IOS 结构体与位域

    参考链接[https://blog.csdn.net/jwheat/article/details/7996557...

  • 利用共用体union、位域存储Bool状态值

    一、利用位域技术存储Bool状态值的方式可以有效的减少内存。 1)位域在结构体中的实践 定义一个匿名结构体,结构体...

  • C语言中的位运算

    C语言中的位运算 结构体是唯一一种允许控制内存位(bit)的数据结构,称作位域(Bit Field) 位域不能离开...

  • 一元多项式的表示和相加

    1 解题思路 先建立一个结构体,结构体中包含系数与指数的数据域以及next的指针域。将每个结构体定义为一个节点,在...

  • Day10

    指针 指针与函数 练习回调函数 结构体 基本概念 结构体变量初始化 定义结构体变量 结构体变量作用域结论; 和变量...

  • OC 对象原理探索(三):对象的本质 & isa

    1. 联合体、位域 1.1 结构体 先看下面的代码: 我们看到一个SSLCar结构体是4个字节,也就是32位(00...

  • 【C语言笔记】<十九>结构体

    结构体的基本概念 结构体初始化 结构体的内存存储细节 结构体定义的方式 结构体类型的作用域 指向结构体的指针 结构...

  • 2017.9.18学习总结

    今天学习了结构体,一般形式为struct 结构体名{成员列表};,每一个成员是结构体中的一个域,成员名命名规则与...

  • OC基础 Runtime-isa (2)

    Runtime-isa 设值 isa之设值:与运算 | Main.m 优化:位域再次优化 使用结构体 再次优化 u...

  • 结构体 联合体 位域

    union 共用体/联合体 结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体...

网友评论

      本文标题:IOS 结构体与位域

      本文链接:https://www.haomeiwen.com/subject/ljjttltx.html