持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情
- Swift Optional
- Swift Enum
- iOS开发 做一个三角形
- Swfit 指针类型
- Swift 属性(下)
- Swift 属性
- Swift 小结
- Swift 类与结构体(下)
- Swift 类的生命周期
- Swift 类的初始化器
- Swift 类与结构体
- OpenGL 压缩纹理
- OpenGL 隧道坐标计算
- 0penGL 像素格式及数据类型
- OpenGL 纹理对象
- OpenGL 纹理
- OpenGL 模型变化
- OpenGL 视图
- OpenGL 矩阵
- OpenGL 向量
- OpenGL 颜色混合
- OpenGL 深度测试的潜在风险
- OpenGL 浅析深度测试
- OpenGL 浅析隐藏面消除
- OpenGL 图元连接方式
- 记WKWebView与HTML完成交互两三事
- OpenGL 渲染流程图解析
- OpenGL 控制你的正方形
- OpenGL 专业名词解释
- OpenGL 环境搭建 - MacOS
今天,我们来一起探讨一下, Swift中 的类与结构体 的内容:
类与结构体的定义
struct/class LGTeacher{
var age: Int var
name: String
init(age: Int, name: String) {
self.age = age
self.name = name
}
deinit{
}
}
结构体和类的主要相同点有:
- 定义存储值的属性
- 定义方法
- 定义下标以使用下标语法提供对其值的访问
- 定义初始化器
- 使用 extension 来拓展功能
- 遵循协议来提供某种功能 主要的不同点有:
- 类有继承的特性,而结构体没有
- 类型转换使您能够在运行时检查和解释类实例的类型
- 类有析构函数用来释放其分配的资源
- 引用计数允许对一个类实例有多个引用
对于类与结构体我们需要区分的第一件事就是: 类是引用类型。也就意味着一个类类型的变量并不直接存储具体的实例对象,是对当前存储具体 实例内存地址的引用。
这里我们借助两个指令来查看当前变量的内存结构
po : p 和 po 的区别在于使用 po 只会输出对应的值,而 p 则会返回值的类型以及命令结果 的引用名。
x/8g: 读取内存中的值(8g: 8字节格式输出)
swift 中有引用类型,就有值类型,最典型的就是 Struct ,结构体的定义也非常简单,相比较 类类型的变量中存储的是地址,那么值类型存储的就是具体的实例(或者说具体的值)。
struct LGStudent{
var age: Int
var name: String
}
var s = LGStudent(age:18, name:kody)
var s1 = s
其实引用类型就相当于在线的 Excel ,当我们把这个链接共享给别人的时候,别人的修改我们 是能够看到的;值类型就相当于本地的 Excel ,当我们把本地的 Excel 传递给别人的时候,就 相当于重新复制了一份给别人,至于他们对于内容的修改我们是无法感知的。
另外引用类型和值类型还有一个最直观的区别就是存储的位置不同:一般情况,值类型存储的在栈上,引用类型存储在堆上。
首先我们对内存区域来一个基本概念的认知,
栈区(stack): 局部变量和函数运行过程中的上下文
//test是不是一个函数
func test(){
//我们在函数内部声明的age变量是不是就是一个局部变量
var age: Int = 10
print(age)
}
Heap: 存储所有对象
Global: 存储全局变量;常量;代码区
Segment & Section: Mach-O 文件有多个段( Segment ),每个段有不同的功能。然后每 个段又分为很多小的 Section
TEXT.text : 机器码
TEXT.cstring : 硬编码的字符串
TEXT.const: 初始化过的常量
DATA.data: 初始化过的可变的(静态/全局)数据
DATA.const: 没有初始化过的常量
DATA.bss: 没有初始化的(静态/全局)变量
DATA.common: 没有初始化过的符号声明