迅速.(绝对)唯一的特殊优势是无足轻重,性能如何?

Fat*_*tie 6 reference weak-references swift

在Swift中,我们有正常的默认输入

  • 对象根本不能成为零.

我们打字很弱

  • 对象可以变为零.如果对象变为nil,则指针自动变为nil,因此您知道该对象变为nil

我们打字无人打字

  • 对象可以变为零.如果对象变为零,则指针没有任何反应 - 如果你试图使用它,你就会被搞砸

(所以:通过推论:你可以使用"无主"的唯一一次是,如果你"绝对知道"该对象将永远不会变为零.)

现在:

在我看来,以下句子,

绝对是真的......

绝对地,我的意思是,真的,真的,绝对,直到最深刻的哲学关注真实......

"无主和弱者之间的唯一区别在于表现.由于无主,没有检查,它更快.绝对没有其他区别."

因而是逻辑推论:

" 绝对没有理由使用无主,除非需要额外的表现而不是弱者."

{旁白 - 我能想到的唯一其他差异在于自我记录的意义.如果我使用无主,它会让我的开发人员知道某些事情; 让我们暂时搁置这个问题.)

所以我的问题很简单,非常准确,非常具体:大胆的句子高于"真实"(在"完全,非常,非常,真实"的真实意义上).

Rob*_*ier 4

我同意雅尼克的观点。你大胆的说法是不正确的。无主引用必须在其生命周期内有效。在程序中-Ounchecked,未能维持此前提条件是未定义的行为。我的意思不是“它崩溃了”。我的意思是这不是一个格式良好的程序;它的作用是未定义的。弱引用由于其释放而无法生成未定义的行为,即使在-Ounchecked.

\n\n

usingunowned是程序员声明该引用在其整个生命周期内都有效。这甚至都不是Type!断言。!类型只是断言引用在访问时有效。这就是为什么你不能x == nil在无主者上进行测试的原因。它不是可选的。它不是“变相的可选”(如Type!)。它必须始终有效。

\n\n
\n

然而,与弱引用不同的是,当另一个实例具有相同的生存期或更长的生存期时,将使用无主引用。...无主引用应始终具有值。\xe2\x80\x94\xe2\x80\x94 [Swift 编程语言]

\n
\n\n

因此,对于你的“最深层次的哲学”来说,无主包括一个弱者不存在的先决条件。这个前提条件存在于程序之外,并且必须由程序员而不是编译器来证明,以确保程序的格式良好。

\n\n

至于是否有理由使用unowned,如果我们采取绝对立场(如您的问题),那么肯定有理由。在已知前提条件为真的情况下,它是最严格的类型。weak是比 弱的类型unowned;它表达的先决条件较少。好的类型理论鼓励我们尽可能使用最强的(最具限制性的;最少的合法值)类型,并且unowned是比 更强的类型weak

\n\n

从非绝对主义(“实用”)意义上来说,选择更强的类型的结果是更简单的代码。当您使用 时weak,您必须不断地重新断言不是nil每次使用它的前提条件并处理它的情况(可能插入fatalError它只是需要unowned更多工作来重新发明)。使用unowned可让您断言此前提条件一次。这会创建更简单、更正确的代码。我从来没有用过unowned速度。我总是用它来避免一遍又一遍地回答“但是如果它为零怎么办?” 在代码中它绝不能为零。

\n