Swift开发标准教程第12章 Swift语言的其他主题.pptxVIP

Swift开发标准教程第12章 Swift语言的其他主题.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第12章 Swift语言的其他主题12.1 自动引用计数12.2 运算符重载12.3 泛型12.4 错误处理12.5 综合案例12.6 上机实践12.1 自动引用计数12.1.1 自动引用计数的工作机制12.1.2 循环强引用的产生12.1.3 循环强引用的解决方法12.1.1 自动引用计数的工作机制当开发者每一次创建一个类的新的实例时,ARC会分配一大块内存用来存储实例相关的信息,如实例的类型信息,实例所有相关的属性值。当实例不再被使用时,ARC将会释放此实例所占的内存,并将释放的内存另作它用。这样可以确保不再使用的实例不会一直占用内存空间。12.1.2 循环强引用的产生在编程中,开发者可能会写出这样的代码,在程序中使用2个或者3个强引用。而这些强引用在不知不觉中就形成了循环(彼此之间进行了关联)强引用。循环强引用是不会因为其中的某一个实例停止使用而进行销毁的,这样将会导致内存资源的泄露以及浪费。本节将讲解两种造成循环强引用的原因。1.类实例之间的循环强引用在两个类实例互相保留对方的强引用,并让对方不被销毁。这就构成所谓的类实例之间的循环强引用。2.闭包引起的循环强引用当开发者将一个闭包赋值给类实例的某个属性,并且在这个闭包体中又使用了实例,或者是闭包体中可能访问了实例的某个属性,例如self.someProperty,或者闭包中调用了实例的某个方法,例如self.someMethod。这两种情况都导致了闭包“捕获”self,从而产生了循环强引用。12.1.3 循环强引用的解决方法本小节将针对12.1.2小节中产生的两种循环强引用进行解决。1.解决类实例之间的循环强引用对于类实例之间产生的循环强引用的解决办法有两种:弱引用、无主引用。以下就是对这两种办法的详细介绍。(1)弱引用弱引用不会牢牢保留住引用的实例,并且不会阻止ARC销毁被引用的实例。这种行为阻止了引用变为循环强引用。在声明的属性或者变量前面加上关键字weak进可以定义弱引用,其语法形式如下: week var 属性名/变量名:数据类型(2)无主引用和弱引用类似,无主引用不会保留住引用的实例。和弱引用不同的是,无主引用是永远有值的。因此,无主引用总是被定义为非可选类型。开发者可以在声明属性或者变量/常量时,在前面加上关键字unowned表示这是一个无主引用,如语法形式如下:unowned let/var 属性/常量/变量:类型(3)无主引用以及隐式解析可选属性弱引用适用于两个属性的值都允许为nil,并会潜在的产生循环强引用的情况;无主引用主要适用于一个属性的值允许为nil,而另一个属性的值不允许为nil,并会潜在的产生循环强引用。但是还有第三种情况,就是两个属性都必须有值,并且初始化完成后不能为nil。在这种情况下,需要一个类使用无主属性,而另外一个类使用隐式解析可选属性。这会使两个属性在初始化完成后能被直接访问,同时避免了循环引用。2.解决闭包引起的循环强引用在定义闭包时,同时定义捕获列表作为闭包的一部分,通过这种方式可以解决闭包和类实例之间的循环强引用。捕获列表定义了闭包体内捕获一个或者多个引用类型的规则。跟解决两个类实例间的循环强引用一样,声明每个捕获的引用为弱引用或无主引用,而不是强引用。应当根据代码关系来决定使用弱引用还是无主引用。(1)捕获列表捕获列表中的每个元素都是由weak或者unowned关键字和实例的引用(如self或someInstance)成对组成的。每一对都在方括号中,通过逗号分开。其定义形式如下:[关键字 self](2)弱引用和无主引用当闭包和捕获的实例总是互相引用,并且总是同时销毁时,将闭包内的捕获定义为无主引用。相反的,当捕获引用有时可能会是nil时,将闭包内的捕获定义为弱引用。弱引用总是可选类型,并且当引用的实例被销毁后,弱引用的值会自动置为nil。这可以让开发者在闭包内检查它们是否存在。12.2 运算符重载12.2.1 为什么使用运算符重载12.2.2 算术运算符的重载12.2.3 一元负号/正号运算符的重载12.2.4 复合赋值运算符的重载12.2.5 自增自减运算符的重载12.2.6 比较运算符的重载12.2.7 自定义运算符的重载12.2.1 为什么使用运算符重载通常情况下,运算符只允许进行数据与数据之间的运算,这种普通的运算,有时是无法满足实际需求的。12.2.2 算术运算符的重载算术运算符分为了+、-、*、/四种,它们都属于中置运算符。它的重载语法形式如下:func 算术运算符 (参数名1:数据类型,参数名2:数据类型) - 返回值的数据类型 { … return 返回数据}12.2.3 一元负号/正号运算符的重载在操作数之前加一个“-”号,此“-”号就被叫作一元负号运算符符。它的作用是将正数变为负数,将负数变为正数。

文档评论(0)

132****9295 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档