Fat*_*tie 6 reference weak-references swift
在Swift中,我们有正常的默认输入
我们打字很弱
我们打字无人打字
(所以:通过推论:你可以使用"无主"的唯一一次是,如果你"绝对知道"该对象将永远不会变为零.)
现在:
在我看来,以下句子,
绝对是真的......
绝对地,我的意思是,真的,真的,绝对,直到最深刻的哲学关注真实......
因而是逻辑推论:
{旁白 - 我能想到的唯一其他差异在于自我记录的意义.如果我使用无主,它会让我的开发人员知道某些事情; 让我们暂时搁置这个问题.)
所以我的问题很简单,非常准确,非常具体:大胆的句子高于"真实"(在"完全,非常,非常,真实"的真实意义上).
我同意雅尼克的观点。你大胆的说法是不正确的。无主引用必须在其生命周期内有效。在程序中-Ounchecked
,未能维持此前提条件是未定义的行为。我的意思不是“它崩溃了”。我的意思是这不是一个格式良好的程序;它的作用是未定义的。弱引用由于其释放而无法生成未定义的行为,即使在-Ounchecked
.
usingunowned
是程序员声明该引用在其整个生命周期内都有效。这甚至都不是Type!
断言。!
类型只是断言引用在访问时有效。这就是为什么你不能x == nil
在无主者上进行测试的原因。它不是可选的。它不是“变相的可选”(如Type!
)。它必须始终有效。
\n\n\n然而,与弱引用不同的是,当另一个实例具有相同的生存期或更长的生存期时,将使用无主引用。...无主引用应始终具有值。\xe2\x80\x94\xe2\x80\x94 [Swift 编程语言]
\n
因此,对于你的“最深层次的哲学”来说,无主包括一个弱者不存在的先决条件。这个前提条件存在于程序之外,并且必须由程序员而不是编译器来证明,以确保程序的格式良好。
\n\n至于是否有理由使用unowned
,如果我们采取绝对立场(如您的问题),那么肯定有理由。在已知前提条件为真的情况下,它是最严格的类型。weak
是比 弱的类型unowned
;它表达的先决条件较少。好的类型理论鼓励我们尽可能使用最强的(最具限制性的;最少的合法值)类型,并且unowned
是比 更强的类型weak
。
从非绝对主义(“实用”)意义上来说,选择更强的类型的结果是更简单的代码。当您使用 时weak
,您必须不断地重新断言不是nil
每次使用它的前提条件并处理它的情况(可能插入fatalError
它只是需要unowned
更多工作来重新发明)。使用unowned
可让您断言此前提条件一次。这会创建更简单、更正确的代码。我从来没有用过unowned
速度。我总是用它来避免一遍又一遍地回答“但是如果它为零怎么办?” 在代码中它绝不能为零。