swift学习笔记(七)自己主动引用计数
与Object-c一样,swift使用自己主动引用计数来跟踪并管理应用使用的内存。当实例不再被使用时,及retainCount=0时,会自己主动释放是理所占用的内存空间。
注:引用计数仅适用于类的实例,由于struct和enumeration属于值类型,也就不牵涉引用,所以其存储和管理方式并非引用计数。
当一个实例被初始化时,系统会自己主动分配一定的内存空间,用于管理属性和方法。当实例对象不再被使用时,其内存空间被收回。
swift中的引用类型分为三种,即Strong强引用,weak弱引用和无主引用unwired
强引用保证在使用过程中,对象不会被释放。但同一时候也导致了强引用环的出现。
强引用环是指两个类实例彼此保持对方的强引用,是两个实例彼此引用,不能被释放的情况。
为解决强引用环的问题,能够使用弱引用或者无主引用来实现。
使用weak弱引用的情况:对于生命周期中,引用可变为nil的实例,使用弱引用,在声明前加入keywordweak;
使用无主引用的情况:对于初始化赋值后,引用再也不会被赋值为nil的情况,使用无主引用,在声明时使用keywordunowned。
注意:
1. weak:由于弱引用的属性,在生命周期中,可能会被指为nil,所以必须被声明为变量类型,不能是常量类型。
又由于弱引用可能没有值,所以声明时将其标为可选类型,“?”比如:weak var name:String?
2.unowned:因为无主类型在赋值后,不可能值为空,所以将其声明为不可选类型。同一时候,在使用无主引用的时候,不须要展开,能够直接訪问。
非可选类型变量不能被赋值为nil,所以在实例被销毁时,不能将其置为nil。
3.
当实例被销毁后,试图訪问该实例的无主引用会触发执行时错误。使用无主引用时请确保引用始终指向一个未销毁的实例。 上面的非法操作会百分百让应用崩溃,不会发生无法预期的行为。因此,你应该避免这样的情况。
swift学习笔记(七)自己主动引用计数的更多相关文章
- Swift 学习笔记 (三) 之循环引用浅析
原创:转载请注明出处 110.自动引用计数实践 下面的例子展示了自动引用计数的工作机制.例子以一个简单的Person类开始,并定义了一个叫name的常量属性: class Person { l ...
- Swift学习笔记七
控制流 Swift提供了和C类似的控制流表达式,包括for.while.if.switch.当然也包括break和continue这种语句来引导控制流到某个指定点的语句. 在C的for基础上,Swif ...
- 初步swift语言学习笔记6(ARC-自己主动引用计数,内存管理)
笔者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/31824179 转载请注明出处 假设认为文章对你有所帮助.请通过留言 ...
- Swift 自己主动引用计数机制ARC
Swift 使用自己主动引用计数(ARC)这一机制来跟踪和管理你的应用程序的内存.通常情况下,Swift 的内存管理机制会一直起着作用,你无须自己来考虑内存的管理.ARC 会在类的实例不再被使用时,自 ...
- Go语言学习笔记七: 函数
Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ...
- 【swift学习笔记】二.页面转跳数据回传
上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...
- (转)Qt Model/View 学习笔记 (七)——Delegate类
Qt Model/View 学习笔记 (七) Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...
- Swift基础语法-内存管理, 自动引用计数
1. 工作机制 Swift和OC一样,采用自动引用计数来管理内存 当有一个强引用指向某一个对象时,该对象的引用计数会自动+1 当该强引用消失时,引用计数会自动-1 当引用计数为0时,该对象会被销毁 2 ...
- Swift学习笔记(一)搭配环境以及代码运行成功
原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹 ...
随机推荐
- Pro Android学习笔记(六一):Preferences(5):组织Preference
PreferenceCategory 假设有多个preference,我们希望能在他们组织在一起.有两种方式,一种就是我们在复合preference中,利用PreferenceScreen进行嵌套,或 ...
- uvaLive5713 次小生成树
uvaLive5713 修建道路使得n个点任意两点之间都可以连通,每个点有都有一定的人口,现在可以免费修一条道路, A是免费修的道路两端结点的人口之和, B的其它不是免费修道路的长度的总和 要求的是A ...
- codeforece Round#311 BCDE
B题 给我们n,m , m表示茶壶的容量 接下来2*n个数字,表示茶杯的容量,将这些茶杯分给n个男孩和n个女孩 可以倒x毫升的茶水给每个女孩,那么就要倒2x毫升的茶水给男孩,当然了,茶杯要装的下,且 ...
- 9patch(.9)怎么去掉自己画上的黑点/黑线
在自己制作.9.png图片的时候,制作之后所制作的图片上面会显示出制作的痕迹,也即是图片区域上会显示小黑点和黑线.那么为了真正的利用.9.png图片的使用效果.这些瑕疵当然是不能出现的了.因此,要想办 ...
- Java RMI(远程方法调用) 实例与分析 (转)
目的: 通过本文,可以加深对Java RMI的理解,知道它的工作原理,怎么使用等. 也为了加深我自己的理解,故整理成文.不足之处,还望指出. 概念解释: RMI(RemoteMethodInvocat ...
- Android开发有用技巧:推断当前系统语言版本号
Locale locale = getResources().getConfiguration().locale; String language = locale.getLanguage(); 以上 ...
- Linux System Programming note 8 ——File and Directory Management
1. The Stat Family #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> ...
- 更改Activity的最底层的布局
public void attachToActivity(Activity activity) { mActivity = activity; TypedArray a = activity.getT ...
- mybaits使用存储过程
如何使用Mybaits调用数据库存储过程,按以下顺序Oracle案例库: 1.在数据库中创建以下存储过程: create or replace procedure pro_hello(p_result ...
- TabHost+RadioGroup搭建基础布局
xml的形势如下: <tabhost> <linearlayout vertival> <framlayout weight=1/> <tabwidget g ...