结构体与类的讲解(区别)
注意事项: 结构体中的方法在默认情况下是不允许修改结构中的属性除非加上mutating
class Student1 {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
func study(name: String) {
print("\(name) 正在学习 .")
}
}
struct Student2 {
var name: String
var age: Int
// init(name: String, age: Int) {
// self.name = name
// self.age = age
// }
// 结构中的方法在默认情况下是不允许修改结构中的属性除非加上mutating
mutating func changeage() {
age += 1
}
}
// 计算机的硬件由五大部分构成:
// 运算器、控制器、存储器、输入设备、输出设备
// 运算器 + 控制器 => CPU(中央处理器)
// 存储器(RAM - Random Access Memory)
// 程序员可以使用的内存大致分为五块区域
// 栈 (stack) - 我们定义的局部变量临时变量都是放在栈上
// - 特点: 小、快
// 堆 (heap) - �我们创建的对象都是放在堆上面的
// - 特点: 大、慢
// 静态区 (static area)
// - 数据段 全局变量放的地方
// - 只读数据段 -常量
// - 代码段 -函数和方法
// 结构的对象是值类型,类的对象是引用类型
// 值类型在赋值的时候会在内存中进行对象的拷贝
// 引用类型在赋值的时候不会进行对象拷贝只是增加了一个引用
// 结论: 我们自定义新类型时优先考虑使用类而不是结构除非我们定义的是一种底层的数据结构(保存其他数据的类型)
// 结构会自动生成初始化方法
//let stu1 = Student1(name: "wang ", age: 15)
//var stu4 = stu1 // 此处内存中任然只有一个学生对象
//stu4.age = 50
//stu4.name = "哼哼哈哈"
//print(stu1.age)
//print(stu1.name)
//
//
//let stu2 = Student2.init(name: "aa", age: 13)
//var stu3 = stu2 // 此处内存中会有两个对象
//stu4.name = "王大锤"
//stu4.age = 18
//print(stu2.name)
//print(stu2.age)