首页 > 代码库 > Swift入门教程17-ARC与强弱引用
Swift入门教程17-ARC与强弱引用
ARC
全称自动引用计数,是一种内存管理机制。当一块内存的强引用的数目等于0的时候,则这块内存将会被释放。
由于在Swift中,枚举和结构体都是值类型,不通过引用方式进行存储和传递,所以Swift中只有类的实例会进行自动引用计数。
规则:在创建的初始,类的实例的引用计数为1,没增加一次强引用,引用计数加1,每个强引用为nil后,引用计数减1。弱引用不会增加引用计数,关键词weak
注意,不能访问已经被释放了的内存,这样会造成程序崩溃。
一、强弱引用
用下图表示会直观一些
二、实例解析
析构函数是在对象内存被释放掉的前调用的,做相应的清理工作,比如打开文件了要在析构中关闭文件,比如增加了observer要在析构中remove。
全称自动引用计数,是一种内存管理机制。当一块内存的强引用的数目等于0的时候,则这块内存将会被释放。
由于在Swift中,枚举和结构体都是值类型,不通过引用方式进行存储和传递,所以Swift中只有类的实例会进行自动引用计数。
规则:在创建的初始,类的实例的引用计数为1,没增加一次强引用,引用计数加1,每个强引用为nil后,引用计数减1。弱引用不会增加引用计数,关键词weak
注意,不能访问已经被释放了的内存,这样会造成程序崩溃。
一、强弱引用
用下图表示会直观一些
一个强引用,一个弱引用。
二、实例解析
析构函数是在对象内存被释放掉的前调用的,做相应的清理工作,比如打开文件了要在析构中关闭文件,比如增加了observer要在析构中remove。
析构函数的关键词是deinit
通过给对象赋nil的方式来断开强引用
class CSDN{ var name:String; init(csdnName:String){ self.name = csdnName } deinit{ println("内存将要被释放") } } var instance1 = CSDN(csdnName:"hello hwc") //引用计数为1 var instance2 = instance1//引用计数为2 weak var instance3 = instance2//引用计数为2 instance1 = nil //引用计数为1 instance2 = nil //引用计数为0,内存被释放,输出“内存将要被释放” //println(instance3.name)这样调用是不对的,因为内存已经被释放了
Swift入门教程17-ARC与强弱引用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。