判断一个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是弱引用,因此存在强引用的只有它自己)