美文网首页
类和结构体

类和结构体

作者: 算命的李老师 | 来源:发表于2020-03-17 15:11 被阅读0次

    类和结构体

    ==类和结构体关系==

    OC中Class点进去看就是一个指向结构体的指针,在64位环境下占8个字节,所以NSObject在内存中就占8个字节,但是真正的的情况是系统分配占16个字节
    共同点
    • 定义属性用于储存值
    • 定义方法用于提供功能
    • 定义下标用于通过下标语法访问值
    • 定义初始化器用于生成初始化值
    • 通过扩展以增加默认实现的功能
    • 符合协议以对某类提供标准功能
    不同点
    • struct作为数据结构的实现体,它默认的数据访问控制是public的,而class作为对象的实现体,它默认的成员变量访问控制是private的
    • 所有的结构体都有一个自动生成的成员逐一构造器,用于初始化新结构体实例中成员的属性,然而类实例并没有默认的成员逐一构造器:
    • 取消初始化器允许一个类实例释放任何其所被分配的资源
    OC中的不同点
    • 对象中的结构体属性中的属性是不允许作单独修改的,比如UIView的frame.size不可以直接被修改为CGSizeMake。但是当不用@property定义结构体,而是用public,通过->方式访问,就可以修改。
    • 结构体只能封装数据 类可以封装行为
    • 结构体和枚举是值类型(栈分配内存小,读取快) ,引用计数允许对一个类的多次引用,结构体总是通过被复制的方式在代码中传递
    • 类型转换允许在运行时检查和解释一个类实例的类型
    Swift中的不同点
    • swift中结构体不能继承,c++里面结构体是可以继承的
    • 类型转换允许在运行时检查和解释一个类实例的类型
    • 初始化器使一个类的实例能够释放它所分配的任何资源。
    • 结构体和枚举是值类型(栈分配内存小,读取快) ,引用计数允许对一个类的多次引用,结构体总是通过被复制的方式在代码中传递
    什么时候用类,什么时候用结构体:

    1:如果封装的这个数据,不仅有数据还有方法,只能使用类。
    2:如果表示实体,没有行为,光有属性,结构体更方便。

    结构体为什么在栈里:

    结构体是值类型,是通过被复制的方式在代码中传递,如果在堆中,结构体数据量很大,拷贝的代价很大。栈的特点是空间小,读取快。

    相关文章

      网友评论

          本文标题:类和结构体

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