SWIFT电文的组成亩燃结构均有固定区雹圆段(Block),共分为五大区段。
Swift,苹果于2014年WWDC苹果开发者大会发布的新开发语言,可与Objective-C共同运行于macOS和iOS平台,用于搭建基于苹果平台的应用程源耐塌序。
Swift是一款易学易用的编程语言,而且它还是第一套具有与脚本语言同样的表现力和趣味性的系统编程语言。Swift的设计以安全为出发点,以避免各种常见的编程错误类别。
age给定默认值
age不给定默认值
结论:
相对于class来说,struct会自动给定初始化方法,如果是class的情况下,会报错
在SIL角度来剖析一下原理:
打开项目文件夹目录
把 mian.swift编译成main.sil并打开(推荐使用vs code)
来看main.sil,提供了两个初始化方法
如果我自己实现了init方法
如果是这样的话,当前编译器就不会帮我生成init方法了,再次查看main.sil
这个时候这里面就只有我们自己生成的初始化方法了
先了解什么是值类型:
例子:
在栈区创建的内存空间是由系统管理的
通过lldb调试来查看age的地址,这个地址很明显是个栈上的地址空间(高地址)
然后对这个内存进行格式化输出,在这个内存地址里面直接存储的我们的值18(0x0000000000000012 )
当放开设置的断点①,停留在断点②处的时候,将age赋值给了age2,等同于我直接把age里面的值18拿出来赋值给了age2,也就是说将18赋值给了好州age2
同样适用lldb调试看结果:
可以看出,age与age2这两个地址只差了8字节大小,栈空间地址分配的过程中是从高到低的,这也可以认证age是存储在栈上的
然后我在格式过输出age与age2的值:
这个值也是一样的,在修改的过程中,修改的是当前独立地址里面的内存的值,也就意味着,在这个过老判程中,可以说age变量是一侍袜改个值类型
同样的,看struct的例子:
通过lldb调试查看:
可以看出,这个结构体的地址0x00000001000081a0中,直接存储的就是0x0000000000000012、0x0000000000000014,所以认证了结构体是值类型
注意点:尽量避免在值类型中包含引用类型
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)