Swift--自动引用计数(魔法小故事)

Swift 日常笔记碎片知识

工作机制
  • Swift和OC一样,采用自动引用计数来管理内容
  • 当有一个强引用指向某一个对象时,该对象的引用计算会自动+1
  • 当该强引用消失时,引用计数会自动-1
  • 当引用计数为0时,该对象会被销毁
循环引用
  • 在通常情况下,ARC是会自动帮助我们管理内存的
  • 但是在开发中会经常出现循环引用问题,比如下面小故事
    案例:


    Swift--自动引用计数(魔法小故事)_第1张图片
    1.png

如果法师与法术赋值为nil时, 相当于2者都不存在都被释放了,尘归尘土归土.

*内存图


Swift--自动引用计数(魔法小故事)_第2张图片
2.png
Swift--自动引用计数(魔法小故事)_第3张图片
3.png

相互引用对方, 法师在搓变羊术时, 如果这时是强引用那么法术无法被释放,导致循环引用,把法术释放在自己身上.(初级法师的低级错误)

Swift--自动引用计数(魔法小故事)_第4张图片
4.png

让法术弱引用


Swift--自动引用计数(魔法小故事)_第5张图片
S20.png
Swift--自动引用计数(魔法小故事)_第6张图片
S.png

*weak和unowend

  • 相同点:
    1.如果是使用weak修饰的弱引用,如果指向的对象销毁,那么指针会自动指向了nil
    2.如果使用unowend修饰的弱引用,如果指向的对象销毁,那么指向依然指向之前的内存地址(注意: 非常危险,很容易产生野指针错误/访问了僵尸对象)
Swift--自动引用计数(魔法小故事)_第7张图片
nip0.png
Swift--自动引用计数(魔法小故事)_第8张图片
Snip02_23.png

因此被unowend修饰且相互引用的对象,是可以被释放, 但开发中不建议使用.

你可能感兴趣的:(Swift--自动引用计数(魔法小故事))