话不多说 直接上代码

class SmartAirConditioner {
var temperature:Int =
//类引用了函数
var temperatureChange:((Int)->())! init() {
/*
[weak self] 表示 self为可选型 可以为nil 所以在使用的时候必须解包
[unowned self]由于在使用前要保证一定有这个对象 所以不必解包 */
// //这是类似于oc的解决方法。
// weak var tempSelf = self
// temperatureChange = {newTemperture in
// if abs(newTemperture - (tempSelf?.temperature)!) >= 10 {
// print("温度变化不大 可以调动")
// }
// }
// temperatureChange = {[weak self] newTempearture in
// //函数中又引用了self 造成了循环引用
// if abs(newTempearture - self!.temperature) >= 10 {
// print("温度变化太大")
// }
// else {
// self!.temperature = newTempearture
// print("这个不错")
// }
// }
temperatureChange = {[unowned self] newTempearture in
//函数中又引用了self 造成了循环引用
if abs(newTempearture - self.temperature) >= {
print("温度变化太大")
}
else {
self.temperature = newTempearture
print("这个不错")
}
} }
deinit {
print("Smart 被销毁了")
} } var airCon:SmartAirConditioner? = SmartAirConditioner()
airCon?.temperature
airCon?.temperatureChange()
airCon?.temperatureChange()
airCon = nil

Swift 学习笔记 (解决Swift闭包中循环引用的三种方法)的更多相关文章

  1. iOS容易造成循环引用的三种场景

    iOS容易造成循环引用的三种场景  ARC已经出来很久了,自动释放内存的确很方便,但是并非绝对安全绝对不会产生内存泄露.导致iOS对象无法按预期释放的一个无形杀手是--循环引用.循环引用可以简单理解为 ...

  2. Android中全屏 取消标题栏,TabHost中设置NoTitleBar的三种方法(转)

    Android中全屏 取消标题栏,TabHost中设置NoTitleBar的三种方法http://www.cnblogs.com/zdz8207/archive/2013/02/27/android- ...

  3. Openerp 中打开 URL 的三种 方法

    来自:http://shine-it.net/index.php/topic,8013.0.html 最近总结了,Openerp 中打开 URL 的三种 方法: 一.在form view 添加 < ...

  4. mysql 中添加索引的三种方法

    原文:http://www.andyqian.com/2016/04/06/database/mysqleindex/ 在mysql中有多种索引,有普通索引,全文索引,唯一索引,多列索引,小伙伴们可以 ...

  5. jQuery中detach&&remove&&empty三种方法的区别

    jQuery中empty&&remove&&detach三种方法的区别 empty():移除指定元素内部的所有内容,但不包括它本身 remove():移除指定元素内部的 ...

  6. mfc 在VC的两个对话框类中传递参数的三种方法

    弄了好久,今天终于把在VC中的对话框类之间传递参数的问题解决了,很开心,记录如下: 1. 我所建立的工程是一个基于MFC对话框的应用程序,一共有三个对话框,第一个对话框为主对话框,所对应的类为CTMD ...

  7. cocos2dx中创建动画的三种方法

    1.最最原始的方法,先创建动画帧,再创建动画打包(animation),再创建动画(animate) 第一步: 创建动画帧:CCSpriteFrame,依赖于原始的资源图片(xx.png,xx.jpg ...

  8. iOS 容易引“起循环引用”的三种场景

    笔者在阅读中总结了一下,在iOS平台容易引起循环引用的四个场景: 一.parent-child相互持有.委托模式 [案例]:   @interface FTAppCenterMainViewContr ...

  9. STM32中AD采样的三种方法分析

    在进行STM32F中AD采样的学习中,我们知道AD采样的方法有多种,按照逻辑程序处理有三种方式,一种是查询模式,一种是中断处理模式,一种是DMA模式.三种方法按照处理复杂方法DMA模式处理模式效率最高 ...

随机推荐

  1. codevs——3111 CYD啃骨头(背包)

    裸的01背包  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description CYD吃饭时有N个骨头可以啃,但CYD要午睡了 ...

  2. ios界面笔记(二)

    1,在ios下实现checkbox的效果 主要思路是添加一个button,然后读取其isselected属性,分别添加不同的界面图片即可 具体实现如下: 2,解决两个window切换时消息无法送达 主 ...

  3. js 日期计算星座 根据生日的月份和日期,一行代码计算星座的js小函数(转)

    本博客根据 开源中国作者清风徐不来 的文章 根据生日的月份和日期,一行代码计算星座的js小函数(转) 原文出自CSDN 无心的专栏 的文章,知识产权归原文作者所有! 点击查看原文:js 日期计算星座

  4. 卸载django

    首先找到django安装路径 Python import sys; sys.path = sys.path[1:]; import django; print(django.__path__) 得到 ...

  5. cocos2d-x 学习记录

    不积跬步,无以至千里.不积小流,无以成江海. 開始学习cocos2d-x ,路漫漫其修远兮.加油!

  6. nx sdk

    最近在做ns 任天堂略坑.. 他想做成一键安装,可总是有些问题,这样再去找就很麻烦了.都是包在里面的,要看很多文档 第一个问题是 NintendoSDK Configuration Manager 这 ...

  7. 2016.7.14 generator基于注解和基于xml自动生成代码的区别

    1.generator配置文件generatorConfig.xml的区别 2.生成代码的区别 注:二者的实体类都一样. (1)基于XML 生成的文件有: 后面省略. 也就是说,基于xml的方式,是要 ...

  8. 取消sudo的密码

    终端输入sudo visudo,显示为以下内容: 我们只要修改其中的一点内容,就可以实现sudo不需要输入密码了 sudo su -chmod +w /etc/sudoersvim /etc/sudo ...

  9. Android解析聚合数据之天气预报

    免费天气预报API:https://www.juhe.cn/docs/api/id/73 ,申请APPKEY MainActivity.java <span style="font-s ...

  10. Iptables实现公网IP DNAT/SNAT

    Iptables实现NAT是最基本的功能,大部分家用路由都是基于其SNAT方式上网,使用Iptables实现外网DNAT也很简单,不过经常会出现不能正常NAT的现象.以下命令将客户端访问1.1.1.1 ...