无法解码弱变量中的值

class User: Codable { //MARK:- Properties var firstName: String? var lastName: String? weak var friend: User? enum CodingKeys: String, CodingKey { case firstName = "first" case lastName = "last" case friend } 

}

User类有一个friend属性,它同样是User类型。 所以为了避免任何保留周期,我把它作为弱变量。 但是当JSONDecoder解码json时,用户实例的friend属性总是为nil。 如果我错误地把这位朋友视为弱势? 如果它是正确的,那么该值将如何插入User的friend属性中。

还读这个弱变量是中间零 。 如果我不使用弱点,会有任何保留周期吗?

你的朋友变量在这个上下文中必须是强大的,如果没有,那么一旦你的init和coder方法结束,你将被实例化和解除分配,改变weak var friend: User? 由这个var friend: User?

关于保留周期,只有在self.friend.friend = selfself.friend = self才会获得保留周期

你总是可以检查一个对象是否正在执行deinit方法

例子

情况1

 class ViewController: UIViewController { var user1 : User? var user2 : User? override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. user1 = User() user2 = User() user1?.friend = user2 user1 = nil } 

结果

user1已取消分配

案例2

 class ViewController: UIViewController { var user1 : User? var user2 : User? override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. user1 = User() user1?.friend = user1 user1 = nil } 

结果

user1未解除分配 – >保留循环问题