-
15_02、访问控制、内存管理(二)
目录 内存管理 逃逸闭包访问控制//一、内存管理func memoryManager(){ //一、引用问题 do{ print("----------1-------") /** 跟OC一样,Swift也是采取基于引用计数的ARC内存管理方案(针对堆空间) Swift的ARC中有3种引用: 1、强引用(strong reference):默认情况下,引用...…
-
15_01、访问控制、内存管理(一)
目录 访问控制 将方法赋值给let/var访问控制/** 模块:指的是独立的代码单元,框架或应用程序会作为一个独立的模块来构建和发布。在 Swift 中,一个模块可以使用 import 关键字导入另外一个模块 在访问权限控制这块,Swift提供了5个不同的访问级别(以下是从高到低排列, 实体指被访问级别修饰的内容) open:允许在定义实体的模块、其他模块中访问,允许其他模块进行继承、重写(open只能用在类、类成员上) public:允许在定义实体的模块、其他模块中访问,不允许其他模...…
-
14_2、可选项本质、运算符重载、扩展(二)
目录 comparable协议的使用 自定义运算符使用 extension的使用comparable协议的使用/// 一、comparable协议的使用struct Student : Comparable { /** score大的比较大,若score相等,age小的比较大 要想比较2个实例的大小,一般做法是: 遵守 Comparable 协议 重载相应的运算符 */ var age: Int var score: Int ...…
-
14_1、可选项本质、运算符重载、扩展(一)
目录 可选项的本质 多重可选项的本质 多重可选项的本质2 溢出运算符 重载运算符 Equatable的用法可选项的本质/// 一、可选项的本质func optionalNature() -> Void { //1、可选项的本质是enum do{ print("-------1----------") /** 可选项的本质是enum类型 public enum Optional<Wrapped&g...…
-
13、String、Array分析
目录 字符串分析 数组分析 补充内容字符串分析/// 一、字符串分析func stringAnaly(){ //1、长度小于等于15的字符串存储于str的内存中 do{ print("-------1-------") var str:String = "0123456789ABCDE" print(Mems.size(ofVal: &str)) //16 print(Mems.ptr(ofVal:...…
-
12_02、泛型
目录 泛型使用 泛型使用2 关联类型使用 some的使用泛型使用/// 一、泛型使用func genericsUse() -> Void { //1、 相同逻辑不同类型 需要写两个方法 do{ print("--------1---------") var num1 = 10 var num2 = 20 func swapInt(_ num1:inout Int, _ num2:inout Int){...…
-
12_01、error处理
目录 错误分析 rethrows defer的用法 assert的使用 fatalErro的使用错误分析一、使用方式如果函数内有throw,函数声明必须使用throws关键字声明,也就是说 thorw 和 throws 必须同时使用。 func readFile(at path: String) throws -> String { guard path != "" else { throw FileError.fileNotFou...…
-
11、可选链、协议、元数据
目录 可选链 协议的使用1 协议的使用2 class static 协议的使用3 mutating 协议使用4 init 协议的使用5 init? init! 协议的继承 系统提供的协议介绍 any和anyObject 其它总结 元数据的应用可选链/// 零、可选链func optionalChain() -> Void { class Car { var price = 0 } class Dog { var weight = 0 } ...…
-
10_2、初始化器(二)
目录 required的用法 属性观察器 可失败初始化器 反初始化器调用required的用法/// 一、required的用法func requiredUse() -> Void { /** 用required修饰指定初始化器,表明其所有子类必须都实现该初始化器(通过继承或重写) 如果子类重写该初始化器必须加上required,不用加override */ class Person{ var age:Int ...…
-
10_1、初始化器(一)
目录 多态分析 初始化器分类 初始化器使用注意 自动继承初始化器多态分析/// 一、多态分析func PolymorphismAnaly(){ class Animal{ func speak () -> Void { print("Animal speak") } func eat() -> Void { print("Animal eat") }...…
-
9_2、方法、下标、继承(二)
目录 下标使用 继承的使用 重写 为父类添加属性观察器 final使用下标使用/// 一、下标使用func subscriptUse(){ //1、下标使用 do{ print("-------1----------") class Point{ var x=0,y=0 static var z = 0 subscript(index:Int)...…
-
9_1、方法、下标、继承(一)
目录 实例方法 类型方法 mutating的用法 discardableResult的使用 汇总 结构体 类 枚举实例方法 类型方法func functionExplain(){ /** 枚举、结构体、类都可以定义实例方法、类型方法 实例方法(Instance Method):通过实例对象调用 类型方法(Type Method):通过类型调用,用static或者class关键字定义 self的作用 ...…
-
8_2、属性(二)
目录 inout的本质 属性分类inout的本质func inoutAssemblyAnaly() -> Void { struct Shape{ var width:Int var side:Int{ willSet{ print("willSetSide",newValue) } didSet{ print("...…
-
8_1、属性(一)
目录 实例说明 存储属性 计算属性 rawValue的本质是 延迟存储属性 属性观察器实例说明func instanceExplain(){ //枚举 enum Season{ case spring,summer,autumn,winter } let s = Season.spring //结构体 struct Point{ var x:Int = 0 var y:...…
-
7、闭包表达式(二)
目录 函数汇编分析 闭包汇编分析 闭包分析 数组相关 自动闭包 测试函数汇编分析/// 一、函数汇编分析func functionAnalyInAssembly() { // 0x100007570 func sum (_ v1:Int,_ v2:Int)->Int{ v1+v2//0x100006d20 0x100006d72 } var fn = sum print(MemoryLayout.size(ofVa...…
-
6、闭包表达式(一)
目录 闭包表达式 闭包表达式在数组中应用 闭包闭包表达式/// 一、闭包表达式func closureExpression(){ /* 在Swift中,可以通过func定义一个函数,也可以通过闭包表达式定义一个函数 */ //1、函数作为参数 do{ func execute (_ x:Int,_ y:Int,fn:(Int,Int)->Int){ print(fn(x,y)) ...…
-
5_2、结构体和类(二)
目录 值类型、引用类型的let 结构体、类、枚举内部都可以定义方法 嵌套类型分析 内存段分析值类型、引用类型的letfunc letAnaly() { //1、let 分析(修饰值类型) struct Point{ var x:Int var y:Int } let p = Point(x:10,y:20) print(MemoryLayout.size(ofValue: p)) //常量p 内存内存储的是值类...…
-
5_1、结构体和类(一)
目录 结构体 类 结构体和类的本质区别结构体在 Swift 标准库中,绝大多数的公开类型都是结构体,而枚举和类只占很小一部分 比如Bool、Int、Double、 String、Array、Dictionary等常见类型都是结构体 struct Date { var year: Int var month: Int var day: Int } var date = Date(year: 2019, month: 6, day: 23)所有的结...…
-
4、枚举汇编分析
目录 查看int类型的内存分布 查看枚举类型的内存分布(原始值的内存分布) 查看枚举类型的内存分布(关联值的内存分布) 特殊情况 switch汇编分析查看int类型的内存分布func memoryAnalyForInt() { //查看变量地址 //view Memory of " " //Debug - Debug WorkFlow - View Memory var age:Int = 10 print(MemoryLayout.size...…
-
3_2、可选项
目录 可选项 强制解包 可选项绑定 空合并运算符 guard语句 隐式解包 字符串插值 多重可选项可选项可选项,一般也叫可选类型,它允许将值设置为nil 在类型名称后面加个问号 ? 来定义一个可选项func optionalUse() -> Void { //1、设置nil //直接设置 nil会报错 //var name:String = nil //name可存储两种类型 String和nil var name:String? ...…