🌓

没想到这篇主题内容也是这么丰富。

Swift 中使用一个叫做自动引用计数的机制来决定什么时候销毁一个对象释放资源。简称 ARC。

ARC 只对强引用计数。预期是你不需要操心任何内存释放的问题,但实际上会有一种情况导致 ARC 不能有效的释放内存。强引用循环。

出于 ARC 的原理,只有强引用计数归零才能触发 ARC 对对象实例的释放操作。但是如果有两个实例相互进行强引用,那么就会陷入一个强引用的死循环。两者相互保持对方还活着,那么两个实例就永远不会被销毁,这会造成内存泄露或溢出。

阅读全文 »

不透明类型是用来隐藏具体类型信息,只以协议类型描述返回值的一个机制。作用在于保持私有类型的私有性,模块外的用户得到协议类型的返回值,不用处理具体实现的类型。这样的好处在于内部更换实现对外部不再有影响,而且不透明类型只是对用户不透明,编译器可以得到具体类型进行特化处理,最好的优化性能。

其语法形式是在返回值协议类型前加 some 关键字。

这篇主题看上去挺重要但实际上很枯燥。主要是,太啰嗦了,而且啰嗦了一大堆也没看懂重点在哪里。

再议!

阅读全文 »

看完这篇主题只觉得:

  • 泛型可以为所欲为;
  • where 语句可以为所欲为。

开个玩笑。

泛型是这门语言的核心内容之一。它可以减少重复代码,拓宽相同逻辑能处理的类型。总结一下其基本思想就是,只要你满足我预期的要求,我就能帮你完成你预期的任务。

阅读全文 »

关于协议的篇幅还是很足的。协议在其他语言中能找到对应的机制,比如 Java 中的接口。相应的,一些与之相关的设计模式也很类似,Java 中的面向接口编程,Swift 中也有被戏称为面向协议编程的模式。

一个协议可以由类、结构体、枚举类型来实现。但是类的情况会复杂很多,有时我们可能需要声明一个面向类的协议,而不希望结构体或者枚举类型来实现它,这时可以让协议继承 AnyObject 达到这一目的。而继承类该对象的协议被称作 Class-Only 协议。

声明实现协议的语法和类继承父类的语法是一样的,但是这里有一个复杂度存在。对于结构体和枚举类型来说,它们不存在继承关系,声明自身名称之后接冒号之后全都是协议(如果你声明协议了的话)。但是类可以继承其他的类,所以 Swift 约定,父类要写在最前面,声明完父类之后才是协议。

协议可以对属性、方法甚至初始化器进行声明要求。而所有声明实现该协议的类型都要对该协议中所有声明对要求进行满足,否则将会在编译时报错。

阅读全文 »

这部分内容也是复习。扩展可以给任何类型添加新的属性、方法、初始化器,虽然它有以下的限制:

  • 对类来说无法添加新的指定初始化器或卸载器,它们只能由原始实现提供;
  • 给另一个 Module 的结构体添加新的初始化器时,在调用其本身的初始化器之前无法访问 self 属性。
阅读全文 »

操作符 isas,一个负责检查,一个负责转换。as? 优雅转换,失败可以返回 nilas! 强制转换,失败就失败,失败就报错!

阅读全文 »

这部分内容还是复习。对于错误处理可以抛出可以处理。对于抛出介绍了 guardthrow,处理介绍了 do-catch、try?try! 方法。

defer 方法可以保证无论代码什么时候离开当前作用域,都将执行一段清洁操作。

阅读全文 »

可选型操作链(Optional Chaining)是为了应对查询或调用当前可能是 nil 的变量的属性、方法和下标时的一个处理。当这个变量有值时操作会成功,否则会返回 nil。多个查询或调用操作可以链接在一起。链上的每个操作返回 nil 时,操作就会结束并返回 nil

阅读全文 »

干货满满的一篇内容,虽然我记录的可能有点意识流了。

先说说简单的卸载器(deinitializer),只有类有,自动继承,在对象被销毁前执行,和之前 Basics 的内容一般无二,很好理解。

然后是初始化器(initializer),内容多了很多。首先是提到了值类型引用的结构体和枚举类型,它们由于没有继承关系,所以初始化器相对简单。它们可以定义委派初始化器,其意思是一个初始化器中调用另一个初始化器,减少代码重复,让每个初始化器专注自己的功能。委派初始化器没有关键字。

另一边,类由于存在继承关系,所以相对复杂一些,类有指定初始化器和便利初始化器的定义。

  • 指定初始化器:初始化类的所有属性,并调用父类的指定初始化器;
  • 便利初始化器:调用同类的指定初始化器,并对其中一部分值给予默认值。
阅读全文 »

说到区块链就不得不提到比特币。

2008 年爆发全球经济危机,当年 11 月 1 日,一个化名为中本聪的人发表了比特币白皮书,《比特币:一个点对点的电子现金系统》。次年 1 月,比特币创世区块诞生。

比特币是一种数字货币,在白皮书中,比特币被设计为一种去中心化的电子记账系统。去中心化和记账是比特币的重点。

对于传统货币来说,记账行为是由银行来完成的。比如说当我们向别人转账时,银行会首先检查我们的账户余额是否足够支付这笔转账,然后记录转账结束后我们的账户中各自还有多少余额,这个过程就是记账。在生活中我们无论是使用银行卡、信用卡进行交易,还是使用支付宝、微信进行转账,记账行为始终是由银行来完成的,这是因为我们信任银行背后的国家的信用,所以将记账交给银行完成。

而在白皮书中,比特币被设计为一种去中心化的货币,记账行为不再经由第三方来完成,我们所有人都是参与记账的对象,并且账本是透明的,每个人随时都可以查看目前为止的所有交易记录。一笔交易从传统的第三方公证的模式转变成点对点模式,不再需要第三方进行公证,因为所有人都可以帮你证明这笔交易的有效性。

阅读全文 »