1.0 在Swift中分有值类型和引用类型

  Int 、String 、 结构体和枚举都属于值类型, 将值类型传递给方法是,将在内存中创建其副本,并传递这个副本;这样我们就可以随心所欲修改它,而不用担心这会修改传入的原始值。

  传递引用类型时不会复制它,而将其地址提供给可能使用他们的函数或方法。闭包以及从类实例化得到的对象都属于引用类型。将闭包或者对象传递给方法时,不会创建其副本,而是传递引用(内存地址)。由于传递引用类型时不会创建其副本,因此需要特别小心,确保在正确的时间妥善地释放它们,过早的释放内存,将会导致崩溃,过晚又会导致内存泄露。

2.0 引用循环

  在这里我们就用一个简单地例子,来简单的说明在开发中,怎么样会造成循环引用。

  例:一个人拥有一条狗,而狗拥有一个主人

  直接上代码  这里Person类里面拥有一个dog属性, 而deinit 相当OC中的dealloc函数

  这里Dog类里面有个主人。。。

在 main.swiftz中 我们这样使用

运行程序,我们会看到,输出台没有任何输出。。。。而当我们在它们其中一个类型中,在声明属性时 添加 weak 时,情况就会不一样。。如,运行程序,就会打印出,人被回收,狗被回收。。。

   从这个例子我们看以看出 在使用 var 声明时,默认是强引用,相当OC中的strong

   讲到这里 var 默认强引用,就想到代理

   一开始,我用Swift写代理是这么写的

个人感觉,没错啊,可是在OC环境下变成了

这时感觉,跟苹果的设计理念不同啊,一般代理属性都应该是 weak啊,然后我就找到了 var delegate : LMTablBarViewDelegate? 这句,在前面添加weak 之后,在看看变化 

这样终于是自己想要的结果。。。。所有我们在设置 代理属性时 应该 在前面 添加 weak修饰。

这些只是个人看法,如有错误,希望大家能帮忙修正

初识Swift中的值和引用,循坏引用、代理的注意点的更多相关文章

  1. Swift——(六)Swift中的值类型

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/twlkyao/article/details/34855597     在Swift中,结构体和枚举 ...

  2. 如何形象简单地理解java中只有值传递,而没有引用传递?

    首先,java中只有值传递,没有引用传递.可以说是"传递的引用(地址)",而不能说是"按引用传递". 按值传递意味着当将一个参数传递给一个函数时,函数接收的是原 ...

  3. Swift 中的值类型与引用类型

    顶级修饰 次级修饰 赋值类型 存储类型 值类型 值类型   深拷贝 栈 值类型 引用类型 浅拷贝 堆 引用类型 值类型 浅拷贝 堆 引用类型 引用类型 浅拷贝 堆 复合引用类型会改变内部值类型的存储行 ...

  4. 使用swift 中的注意,不断完善中

    1. 应该充分利用swfit的新特性 比如如果按照oc里的习惯,调用一个delegate中都optional函数应该这样写 if delegate != nil && delegate ...

  5. 为什么大家都说Java中只有值传递?

    最近跟Java中的值传递和引用传递杠上了,一度怀疑人生.查了很多资料,加上自己的理解,终于搞清楚了,什么是值传递和引用传递.也搞明白了,为什么大家都说Java只有值传递,没有引用传递.原来,我一直以来 ...

  6. Cocos2D在新版Swift中常量枚举值引用代码的修改

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们知道在SpriteBuilder中是无法直接给一个CCB文 ...

  7. Java中的值传递和引用传递

    这几天一直再纠结这个问题,今天看了这篇文章有点思路了,这跟C++里函数参数为引用.指针还是有很大区别. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里 ...

  8. JS中原始值和引用值的储存方式

    在ECMAscript中,变量可以存放两种类型的值,即原始值和引用值 原始值指的是代表原始数据类型的值,也叫基本数据类型,包括:Number.Stirng.Boolean.Null.Underfine ...

  9. 一道笔试题来理顺Java中的值传递和引用传递

      题目如下: private static void change(StringBuffer str11, StringBuffer str12) { str12 = str11; str11 = ...

随机推荐

  1. 软硬链接ln

    1:软链接 -- 快捷方式 I:ln -s 文件名 快捷方式的名字 文件名:使用绝对路径 II':目录也可以创建链接 2:硬链接 I: ln 文件名 硬链接的名字

  2. 网络爬虫2:使用crawler4j爬取网络内容

    https://github.com/yasserg/crawler4j 需要两个包: crawler4j-4.1-jar-with-dependencies.jar slf4j-simple-1.7 ...

  3. RecyclerView中设置match_parent无效;

    在RecyclerView中宽度设置了match_parent,但是效果和wrap_content一样: 说下解决方法: 1.这样子写,match_parent没有效果: View v = View. ...

  4. HTML中head与body标签

    一 head内常用标签 1.meta相关 #1.指定字符集 <meta charset="gbk"> #2.页面描述 <meta name="Descr ...

  5. [Unity工具]嵌套Prefab

    在父Prefab中嵌套子Prefab,那么如果对这个嵌套Prefab进行修改,改变将不会应用到子Prefab中:同理,对子Prefab的修改,也不会应用到这个嵌套Prefab中.因此,就会出现一些问题 ...

  6. ubuntu 16042 安装过程

    IDE接口的硬盘被称为hd SCSI和SATA接口的硬盘则被称为sd 第1块硬盘称为sda, 第2块硬盘称为sdb 一块硬盘最多有4个主分区,主分区以外的分区称为扩展分区,硬盘可以没有扩展分区,但是一 ...

  7. 学习excel的使用技巧一空格替换为0

    问题1  把excel表格中的空格  填充为0 方法1 选中CDE列    CRTL+F 查找空 替换为0 方法2 选中CDE列 CRTL+G 打开定位  点击条件定位  选择空值 点击确定  然后在 ...

  8. 【其他】SAS key 获得办法【转载】

    小弟偶然得到了一个利用google得到SID的方法,经本人测试(9.4 64位)得到的SID可以用到2015年12月,从此之后再也不用改时间了.为了让更多的人看见,设定了回复可见.所有内容免费.路过的 ...

  9. 代码参考: css3动画—— 星系轨道

    CSS3橙色的星球绕轨道公转动画 http://hovertree.com/texiao/css3/24/ 例子 http://hovertree.com/h/bjaf/css3xingxi.htm ...

  10. a.每个 HTML 文件里开头都有个<!DOCTYPE>

    <!DOCTYPE> 位于文档中最前面的位置,告诉浏览器以哪个HTML版本进行解析. 在 HTML5 中只有一种:<!DOCTYPE html> .