Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了swift语言的学习笔记六(ARC-自动引用计数,内存管理)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_616_0@

概述

Swift使用自动引用计数(ARC)来管理应用程序的内存使用。这表示内存管理已经是Swift的一部分,在大多数情况下,你并不需要虑内存的管理。当实例并不再被需要时,ARC会自动释放这些实例所使用的内存。 另外需要注意的: 引用计数仅仅作用于类实例上。结构和枚举是值类型,而非引用类型,所以不能被引用存储和传递。 swift的ARC工作过程 每当创建一个类的实例,ARC分配一个内存块来存储这个实例的

Swift使用自动引用计数(ARC)来管理应用程序的内存使用。这表示内存管理已经是Swift的一部分,在大多数情况下,你并不需要虑内存的管理。当实例并不再被需要时,ARC会自动释放这些实例所使用的内存。

另外需要注意的

引用计数仅仅作用于类实例上。结构和枚举是值类型,而非引用类型,所以不能被引用存储和传递。


swift的ARC工作过程

每当创建一个类的实例,ARC分配一个内存块来存储这个实例的信息,包含了类型信息实例的属性值信息

另外当实例不再被使用时,ARC会释放实例所占用的内存,这些内存可以再次被使用。
但是,如果ARC释放了正在被使用的实例,就不能再访问实例属性,或者调用实例的方法了。直接访问这个实例可能造成应用程序的崩溃。就像空实例或游离实例一样。
为了保证需要实例时实例是存在的,ARC对每个类实例,都追踪有多少属性、常量、变量指向这些实例。当有活动引用指向它时,ARC是不会释放这个实例的。
为实现这点,当你将类实例赋值属性常量变量时,指向实例的一个强引用(strong reference)将会被构造出来。被称为强引用是因为它稳定地持有这个实例,当这个强引用存在时,实例就不能够被自动释放,因此可以安全地使用。

例子:

  1. classTeacher
  2. {
  3. vartName:string
  4. init(name:string)
  5. tName=name
  6. println("老师\(tName)实例初始化完成.")
  7. }
  8. funcgetName()->String
  9. returntName
  10. }
  11. funcclassing()
  12. {
  13. println("老师\(tName)正在给学生讲课.")
  14. deinit
  15. println("老师\(tName)实例析构完成.")
  16. }
测试ARC:

    functestArc()
  1. varteacher:Teacher?=Teacher(name:"张三")//实例化一个Teacher对象将指向一个变量,此时产生了一个强引用(就好像OC中的引用计数+1)
  2. varrefteacher:Teacher?=teacher//再次产生强引用即(引用计数再+1)
  3. varrefteacher2:Teacher?=teacher<spanstyle="white-space:pre"></span><spanstyle="font-family:Arial,sans-serif;">//再次产生强引用即(引用计数再+1)</span>
  4. refteacher=nil//第一个引用对象为nil并没有使实例释放,(引用计数-1)
  5. teacher?.classing()//正常
  6. teacher=nil//第二个引用对象为nil并没有使实例释放,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> refteacher2!.classing() refteacher2=nil//第三个引用对象为nil此时已没有作何引用了,因此ARC回收,实例释放.(引用计数-1)最后引用计数为0,则自动调用析构
  7. refteacher2?.classing()//不再有输出
  8. }

大佬总结

以上是大佬教程为你收集整理的swift语言的学习笔记六(ARC-自动引用计数,内存管理)全部内容,希望文章能够帮你解决swift语言的学习笔记六(ARC-自动引用计数,内存管理)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。