xhr Asked:2020-05-23 18:35:24 +0000 UTC2020-05-23 18:35:24 +0000 UTC 2020-05-23 18:35:24 +0000 UTC 为什么在 unowned-property 是可选的地方编译代码? 772 如果 Swift 中的 unowned 属性不能包含 nil,为什么代码编译时 unowned-property 是可选的?重点是什么? swift 1 个回答 Voted Best Answer VAndrJ 2020-05-23T21:10:42Z2020-05-23T21:10:42Z unowned 可能包含 nil,是可选的。如果您最初将 nil 传递给 class2 变量并尝试使用它,则不会发生任何不好的事情。但是,如果您最初传递一个非 nil 对象,使用它,然后它变为 nil 并继续使用它 - 那就是您遇到崩溃的时候。 unowned 并不妨碍它是可选的——它是一种“打破”保留周期的机制,确保它指向的对象(但不持有强引用)存在,否则我们会崩溃。 想到了这样一个例子,你的 class1 是一个从它进入一个无主水池的跳水塔。游泳池存在 - 跳跃是正常的,一切都很好。但后来这个水池被水泥打成了建筑工地,现在它是零。跳入池中的塔。另一个从塔上跳下来......崩溃程序。 也就是说,当你确定这个 class2 从外部的生命周期大于你传递给它的 class1 时,你关心的是使用 unowned。
unowned 可能包含 nil,是可选的。如果您最初将 nil 传递给 class2 变量并尝试使用它,则不会发生任何不好的事情。但是,如果您最初传递一个非 nil 对象,使用它,然后它变为 nil 并继续使用它 - 那就是您遇到崩溃的时候。
unowned 并不妨碍它是可选的——它是一种“打破”保留周期的机制,确保它指向的对象(但不持有强引用)存在,否则我们会崩溃。
想到了这样一个例子,你的 class1 是一个从它进入一个无主水池的跳水塔。游泳池存在 - 跳跃是正常的,一切都很好。但后来这个水池被水泥打成了建筑工地,现在它是零。跳入池中的塔。另一个从塔上跳下来......崩溃程序。
也就是说,当你确定这个 class2 从外部的生命周期大于你传递给它的 class1 时,你关心的是使用 unowned。