swif-自动引用计数
import UIKit/* class Person {let name: String//强引用init(name: String) {self.name = nameprint("\(name) is being initialized")}//引用计数销毁时deinit {print("\(name) is being deinitialized")} } */class Person {let name: Stringinit(name: String) { self.name = name }var apartment: Apartment?deinit { print("\(name) is being deinitialized") } } class Apartment {let unit: Stringinit(unit: String) { self.unit = unit } // var tenant: Person? weak var tenant: Person? //弱引用deinit { print("Apartment \(unit) is being deinitialized") } }class First_Demo2: UIViewController {// var reference1: Person? // var reference2: Person? // var reference3: Person? var john: Person?var unit4A: Apartment?var johnnn: Customer?override func viewDidLoad() {super.viewDidLoad()self.navigationItem.title = "自动引用计数"self.view.backgroundColor = UIColor.white// let person = Person(name:"wangyalu")//reference1 = Person(name: "John Appleseed")//John Appleseed is being initialized//在你清楚地表明不再使用这个 Person 实例,强引用被断开时,ARC 会销毁它: // reference1 = nil//互为强引用john = Person(name:"wang")unit4A = Apartment(unit:"4A")// Person 实例现在有了一个指向 Apartment 实例的强引 用,而 Apartment 实例也有了一个指向 Person 实例的强引用。因此,当你断开 john 和 unit4A 变量所持有的强 引用时,引用计数并不会降为 0 ,实例也不会被 ARC 销毁: john!.apartment = unit4Aunit4A!.tenant = john//当你把这两个变量设为 nil 时,没有任何一个析构函数被调用。循环强引用会一直阻止 Person 和 Apartme nt 类实例的销毁,这就在你的应用程序中造成了内存泄漏。john = nilunit4A = nil//注意:/*在使用垃圾收 的系统里,弱指针有时用来实现简单的缓冲机制,因为没有强引用的对象只会在内存压力触发垃 圾收 时才被销毁。但是在 ARC 中,一旦值的最后一个强引用被移除,就会被立即销毁,这导致弱引用并不适 合上面的用途。*/johnnn = Customer(name: "John Appleseed")johnnn!.card = CreditCard(number: 1234_5678_9012_3456, customer: johnnn!)johnnn = nil// 打印 “John Appleseed is being deinitialized”// 打印 ”Card #1234567890123456 is being deinitialized” }/*Customer 实例持有对 CreditCard 实例的强引用,而 CreditCard 实例持有对 Customer 实例的无主引用。 由于 customer 的无主引用,当你断开 johnnn 变量持有的强引用时,再也没有指向 Customer 实例的强引用了:由于再也没有指向 Customer 实例的强引用,该实例被销毁了。其后,再也没有指向 CreditCard 实例的强引 用,该实例也随之被销毁了:*/class Customer {let name: Stringvar card: CreditCard?init(name: String) {self.name = name}deinit { print("\(name) is being deinitialized") }}class CreditCard {let number: UInt64unowned let customer: Customerinit(number: UInt64, customer: Customer) {self.number = numberself.customer = customer}deinit { print("Card #\(number) is being deinitialized") }}override func didReceiveMemoryWarning() {super.didReceiveMemoryWarning()// Dispose of any resources that can be recreated. }}
转载于:https://www.cnblogs.com/sayimba/p/6237240.html
swif-自动引用计数相关推荐
- Swift学习:自动引用计数
swift 使用自动引用计数(ARC)机制来跟踪和管理你的应用程序的内存.通常情况下,swift 内存管理机制会一直起作用,你无须自己来考虑内存的管理.ARC 会在类的实例不再被使用时,自动释放其占用 ...
- OC中的自动引用计数
目录: 1,自动引用计数的定义 2,强引用和弱引用 3,类比手动引用 4,循环引用 5,CoreFoundation 内容: 自动引用计数的定义: (Automatic Reference Count ...
- iOS 自动引用计数和内存泄露
自动引用计数与解决内存泄露 自动引用计数主要用于管理和释放内存. 引用计数 我们在创建一个对象的时候,系统会为其分配内存,而什么时候和谁来释放对象内存成了问题,如果不释放,就会导致内存不足.所以苹果公 ...
- swift_025(Swift 的自动引用计数(ARC)
//***********swift学习之25--自动引用计数(ARC)--*************************** // 有了手动管理的概念的话,对于开发避免出现一些不易观察的问题,和 ...
- 【2015-10-19】内存管理---深浅拷贝,autorelease,ARC(自动引用计数)
2019独角兽企业重金招聘Python工程师标准>>> 一.复习内存管理中的MRC(手动管理内存) 1.还是遵循谁retain,谁release的原则: 2.遛狗练习的中途换狗问题, ...
- Swift2.1 语法指南——自动引用计数
原档: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programm ...
- Swift中文教程(十六) 自动引用计数
Swift使用自动引用计数(ARC)来管理应用程序的内存使用.这表示内存管理已经是Swift的一部分,在大多数情况下,你并不需要考虑内存的管理.当实例并不再被需要时,ARC会自动释放这些实例所使用的内 ...
- 关于oc中自动引用计数 小结
1.自动引用计数 ARC(Automatic Reference Counting,自动引用计数)极大地减少了Cocoa开发中的常见编程错误:retain跟release不匹配.ARC并不会消除对re ...
- OC基础15:内存管理和自动引用计数
"OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.什么是ARC? (1).ARC全名为A ...
- js 内存引用计数_快速内存管理–自动引用计数
js 内存引用计数 In this tutorial, we'll be covering Swift memory management and learn about Automatic Refe ...
最新文章
- (0097)iOS开发之应用间的分享系列(2)
- RUNOOB python练习题12 找素数问题
- 上周热点回顾(6.5-6.11)
- LeetCode - 7 - Reverse Integer
- 纯CSS: hover特效
- web程序设计(2)....开发流程?
- 孙鑫VC学习笔记:第六讲 菜单
- 物联网应用中的数字孪生——一种实现物联网数字孪生的全面的解决方案
- 凤凰 Remix android x86,主流 Android x86系统分享
- 【原创】CentOS8最小化安装中系统命令,看你能认识几个
- Auto.js找图找色常用功能
- CentOS7升级MariaDB 10.2版本详细步骤
- centos7密码破解
- mybatis批量删除 java_Mybatis批量删除数据操作方法
- Hive on Hbase
- 23考研计算机:天津理工大学
- 学习这东西确实得稳扎稳打,勿焦勿躁
- 招商银行信用卡中心视频面试
- 详细的计算机存储层次结构图,必知必会-存储器层次结构
- Arch linux uefi 启动盘,用UEFI安装ArchLinux 20140105
热门文章
- oracle删除无效归档日志,求助:rman无法按照策略删除过期的归档日志
- mysql+永久+关闭提交,MySQL学习【第十一篇存储引擎之事务解释】
- spring logback mysql_logback 日志输出格式
- matplotlib绘图蓝本
- 用于精准判断的贝叶斯定理
- 【杂谈】有三AI秋季划火热进行中,如何深入学习模型优化,人脸算法,图像质量等研究方向...
- 全球及中国水刀机械行业发展态势及及投资决策建议报告2021年版
- jenkins报错Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password) 的处理
- shell脚本基本命令1
- PyCharm-缩进 格式化代码