• Swift结构体和类


    Swift结构体

    在Swift标准中,绝大多数的公开的类型都是结构体,而枚举和类只占很小的一部分

     比如Bool、Int、Double、String、Array、Dictionary等常见的类型都是结构体

    Swift定义一个结构体

     所有的结构体都有一个编译器自动生成的初始化器 编译器会根据情况,可能会为结构体生成多个初始化器

    宗旨是为了保证初始化的结构体所有成员都有初始值

    定义的Person结构体,编译器自动生成的初始化器

    创建一个Person结构体实例

    一旦在自定义结构体时自定义初始化器,编译器就不会载自动生成其它初始化器了

     结构体的内存结构

    Swift类

    类的定义和结构体类似,但是编译器并没有为类自动生成可以传入成员值的初始化构造器

    如果类的所有成员都在定义的时候指定了初始值,编译器会为类生成无参的初始化器 成员的初始化是在这个初始化器中完成的

    类的实例对象的内存结构 

     

    结构体与类的本质区别

    1. 结构体、枚举都是值类型,类是引用类型
    2. 值类型赋值给var、let或者给函数传参,是直接将所有内容拷贝一份 产生了全新的副本,属于深拷贝
    3. 引用赋值给var、let或者给函数传参,是将内存地址拷贝一份,指向的是同一份内存空间,属于浅拷贝

    在Swift标准库中,为了提升性能,String、Array、Dictionary、Set采取了Copy On Write的技术,仅当有"写"操作时,才会真正执行拷贝操作

    对于标准库值类型的赋值操作,Swift能确保最佳性能,所以没必要为了保证最佳性能来避免赋值

    建议:不需要修改的,尽量使用let

  • 相关阅读:
    随机数表示方法
    何时用重定向何时用转发
    http中重定向和请求转发
    Java正则表达式
    自定义圆形的ProgressBar
    Android内存管理机制
    Android 安全机制
    8位颜色值的含义
    Shape使用
    Bitmap(三)
  • 原文地址:https://www.cnblogs.com/CoderHong/p/11256898.html
Copyright © 2020-2023  润新知