swift学习笔记(七)自动引用计数

与Object-c一样,swift使用自动引用计数来跟踪并管理应用使用的内存。当实例不再被使用时,及retainCount=0时,会自动释放是理所占用的内存空间。

注:引用计数仅适用于类的实例,因为struct和enumeration属于值类型,也就不牵涉引用,所以其存储和管理方式并不是引用计数。

当一个实例被初始化时,系统会自动分配一定的内存空间,用于管理属性和方法。当实例对象不再被使用时,其内存空间被收回。

swift中的引用类型分为三种,即Strong强引用,weak弱引用和无主引用unwired

强引用保证在使用过程中,对象不会被释放。但同时也导致了强引用环的出现。

强引用环是指两个类实例彼此保持对方的强引用,是两个实例彼此引用,不能被释放的情况。

为解决强引用环的问题,可以使用弱引用或者无主引用来实现。

使用weak弱引用的情况:对于生命周期中,引用可变为nil的实例,使用弱引用,在声明前添加关键字weak;

使用无主引用的情况:对于初始化赋值后,引用再也不会被赋值为nil的情况,使用无主引用,在声明时使用关键字unowned。

注意:

1. weak:因为弱引用的属性,在生命周期中,可能会被指为nil,所以必须被声明为变量类型,不能是常量类型。

又因为弱引用可能没有值,所以声明时将其标为可选类型,“?”例如:weak var name:String?

2.unowned:由于无主类型在赋值后,不可能值为空,所以将其声明为不可选类型。同时,在使用无主引用的时候,不需要展开,可以直接访问。

非可选类型变量不能被赋值为nil,所以在实例被销毁时,不能将其置为nil。

3.

当实例被销毁后,试图访问该实例的无主引用会触发运行时错误。使用无主引用时请确保引用始终指向一个未销毁的实例。 上面的非法操作会百分百让应用崩溃,不会发生无法预期的行为。因此,你应该避免这种情况。

swift学习笔记(七)自动引用计数,布布扣,bubuko.com

时间: 2024-08-01 10:43:51

swift学习笔记(七)自动引用计数的相关文章

Swift学习笔记七:闭包

闭包可以 捕获 和存储其所在上下文中任意常量和变量的引用. Swift 会为您管理在 捕获 过程中涉及到的内存操作. 在 函数 章节中介绍的全局和嵌套函数实际上也是特殊的闭包,闭包采取如下三种形式之一: 1. 全局函数是一个有名字但不会捕获任何值的闭包 2. 嵌套函数是一个有名字并可以捕获其封闭函数域内值的闭包 3. 闭包表达式是一个可以捕获其上下文中变量或常量值的没有名字的闭包 一.闭包表达式 闭包函数类似于Objective-C中的block.下面我们用事实说话: let counts =

swift学习笔记(七)自己主动引用计数

与Object-c一样,swift使用自己主动引用计数来跟踪并管理应用使用的内存.当实例不再被使用时,及retainCount=0时,会自己主动释放是理所占用的内存空间. 注:引用计数仅适用于类的实例,由于struct和enumeration属于值类型,也就不牵涉引用,所以其存储和管理方式并非引用计数. 当一个实例被初始化时,系统会自己主动分配一定的内存空间,用于管理属性和方法.当实例对象不再被使用时,其内存空间被收回. swift中的引用类型分为三种,即Strong强引用,weak弱引用和无主

Swift学习笔记七

控制流 Swift提供了和C类似的控制流表达式,包括for.while.if.switch.当然也包括break和continue这种语句来引导控制流到某个指定点的语句. 在C的for基础上,Swift提供了更强大的for-in,遍历起来更方便. Swift的switch也比C中的更强大,其中的case在执行之后并不会继续执行下一个case,这样就避免了C中忘记写break时产生的逻辑错误.同时,case也能匹配更多的模式,包括间隔匹配,元组等,被匹配的值可以被赋值给变量或者常量,以便在case

Swift学习笔记七:集合

数组 Array 数组的创建 OC 中使用 @[] 定义数组, Swift 中使用 [] 定义数组 [类型] 表示数组中存放的都是该类型的元素 Swift 中数组中的元素可以是基本数据类型 // 创建数组 var array1: Array<Int> vararray2:Array<Int> = [2,3] var array3: [Int] var array33 = [Int]() array1 = Array(arrayLiteral: 1, 2, 3, 4) var arr

swift 学习之自动引用计数

swift 学习之自动引用计数 学习和研究的主要是"实例对象和实例对象直接的相会强引用所产生的内从泄漏"和"使用闭包产生的强引用造成的内存泄漏" 注意:只有以引用类型存储或者传递的才会存在自动引用计数,比如类,闭包,而枚举.结构体等这都是值存储,值传递不存在引用计数问题(其实也就是Object-c中我们熟悉的ARC,和他的原理是一样的) 实例对象和实例对象之间的相互引用造成的内存泄漏 1>产生原因 两个类中都有对方类的实例变量作为自己的属性,举个例子:创建一个

Swift的自动引用计数

前言 在iOS5之后apple推出了相对于MRC(Mannul Reference Counting)的ARC(Automatic Reference Counting)的内存管理机制,前者是对内存的手动管理,后者是系统对内存的智能化管理.其实我学习iOS的时候已经推出到iOS7了,对于MRC机制我甚至连一知半解都算不上.有时候和iOS老司机交流的时候他们对于各种内存都很熟悉,感觉包括我在内的很多最近两年刚学习iOS开发的同学,都属于填鸭式的学习吧,知其然不知其所以然,甚至都没耐心去读优秀的源码

Swift中文教程(十六) 自动引用计数

Swift使用自动引用计数(ARC)来管理应用程序的内存使用.这表示内存管理已经是Swift的一部分,在大多数情况下,你并不需要考虑内存的管理.当实例并不再被需要时,ARC会自动释放这些实例所使用的内存. 但是,少数情况下,你必须提供部分代码的额外信息给ARC,这样它才能够帮你管理这部分内存.本章阐述了这些情况并且展示如何使用ARC来管理应用程序的内存. 注意引用计数仅仅作用于类实例上.结构和枚举是值类型,而非引用类型,所以不能被引用存储和传递. 1.ARC怎样工作每当你创建一个类的实例,ARC

swift:自动引用计数ARC

Swift自动引用计数:ARC Swift使用自动引用计数(ARC)来跟踪并管理应用使用的内存.大部分情况下,这意味着在Swift语言中,内存管理"仍然工作",不需要自己去考虑内存管理的事情.当实例不再被使用时,ARC会自动释放这些类的实例所占用的内存. 然而,在少数情况下,为了自动的管理内存空间,ARC需要了解关于你的代码片段之间关系的更多信息.本章描述了这些情况,并向大家展示如何打开ARC来管理应用的所有内存空间. 注意:引用计数只应用在类的实例.结构体(Structure)和枚举

Swift 自动引用计数机制ARC

Swift 使用自动引用计数(ARC)这一机制来跟踪和管理你的应用程序的内存.通常情况下,Swift 的内存管理机制会一直起着作用,你无须自己来考虑内存的管理.ARC 会在类的实例不再被使用时,自动释放其占用的内存. 然而,在少数情况下,ARC 为了能帮助你管理内存,需要更多的关于你的代码之间关系的信息.本章描述了这些情况,并且为你示范怎样启用 ARC 来管理你的应用程序的内存. 注意: 引用计数仅仅应用于类的实例.结构体和枚举类型是值类型,不是引用类型,也不是通过引用的方式存储和传递. 自动引