自学swift,想到一个循环引用的问题,如果创建一个结构体,和一个类,相互引用着对方,如下:
struct StructObj {
var classObj: ClassObj?
}
class ClassObj {
var structObj: StructObj?
deinit {print("ClassObj deinit")}
}
func test() {
print("start")
var structObj: StructObj? = StructObj.init() //Struct
var classObj: ClassObj? = ClassObj.init() //Class
// structObj不释放
structObj!.classObj = classObj
classObj!.structObj = structObj
//-----------------
// classObj会释放
// classObj!.structObj = structObj
// structObj!.classObj = classObj
print("end")
}
test()
在运行这2句代码时
struct Obj!.classObj = classObj
classObj!.structObj = structObj
相互引用着,导致类classObj无法释放,但是如果这2句代码交换位置:
classObj!.structObj = structObj
struct Obj!.classObj = classObj
此时能释放classObj
分析不出这其中的原因,请达老帮忙解答一下!
可以使用弱引用或无主引用
class ClassObj {
weak var structObj: StructObj?
deinit { print("ClassObj deinit") }
}