0
点赞
收藏
分享

微信扫一扫

weak与strong

一只1994 2022-02-27 阅读 49

先说指针的区别,先创建一个test类

class Test {
    deinit
    {
        print("对象已经销毁")
    }
}
class ViewController: UIViewController {
    var test1:Test?
    weak var test2:Test?
    override func viewDidLoad() {
        super.viewDidLoad()
        test1 = Test()
        test2 = Test()
        // Do any additional setup after loading the view.
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        print(test1)
        print(test2)
    }
}

程序一运行首先就打印了对象已销毁.因为test2没有强指针指向,一个在栈里面创建的对象出栈就直接释放了,所以viewdidload结束就直接释放了,而test1因为有强指针指向所以还有值,如果是unsafe_unretained指针,不仅会释放,再次使用会直接崩溃

对象已经销毁
Optional(swift_test.Test)
nil

点击屏幕了之后打印的是上面的内容

就不看底层代码了,底层会判断是否是弱引用,强引用会判断是否有引用计数,而弱引用是直接释放的

举报

相关推荐

0 条评论