判断一个AnyObject实例是否存在唯一的强引用isKnownUniquelyReferenced

isKnownUniquelyReferenced:用于判断一个AnyObject实例是否只存在唯一的强引用

class MyClass {}

 

判断MyClass实例存在唯一的强引用的例子:

var cls = MyClass()

if isKnownUniquelyReferenced(&cls) {
    print("cls存在唯一的强引用")
}else{
    print("cls不存在唯一的强引用,存在其他类型的实例对它有强引用")
}

输出:cls存在唯一的强引用(因为cls只有自己强引用自己)

 

判断MyClass实例不存在唯一的强引用的例子:

struct MyStruct {
    let cls: MyClass
}

var cls = MyClass()
let s1 = MyStruct(cls: cls)

if isKnownUniquelyReferenced(&cls) {
    print("cls存在唯一的强引用")
}else{
    print("cls不存在唯一的强引用,存在其他类型的实例对它有强引用")
}

输出:cls不存在唯一的强引用,存在其他类型的实例对它有强引用(因为cls同时被s1实例强引用)

 

weak或unowned(无主引用),不算强引用

struct MyStruct {
    weak var cls: MyClass? // weak是弱引用
}

var cls = MyClass()
let s1 = MyStruct(cls: cls)

if isKnownUniquelyReferenced(&cls) {
    print("cls存在唯一的强引用")
}else{
    print("cls不存在唯一的强引用,存在其他类型的实例对它有强引用")
}

输出:cls存在唯一的强引用(因为weak是弱引用,因此存在强引用的只有它自己)

 

posted @ 2021-08-13 16:49  zbblogs  阅读(236)  评论(0编辑  收藏  举报