相关疑难解决方法(0)

弱引用和无引用引用之间有什么区别?

斯威夫特有:

  • 强引用
  • 弱参考
  • 无主参考文献

无主参考如何与弱参考不同?

什么时候使用无主参考安全?

无主引用是否存在安全风险,如C/C++中的悬空指针

memory-management weak-references automatic-ref-counting dangling-pointer swift

232
推荐指数
4
解决办法
7万
查看次数

Swift 弱引用比强引用慢得多

我正在用 Swift 构建一个物理引擎。在对引擎进行了一些最近的添加并运行了基准测试之后,我注意到性能大大降低了。例如,在下面的屏幕截图中,您可以看到 FPS 如何从 60 FPS 下降到 3 FPS(FPS 位于右下角)。最终,我将问题归结为一行代码:

final class Shape {
    ...
    weak var body: Body! // This guy
    ...
}
Run Code Online (Sandbox Code Playgroud)

在我添加的某个时候,我添加了一个从Shape类到Body类的弱引用。这是为了防止强引用循环,因为Body也有对Shape.

不幸的是,弱引用似乎有很大的开销(我想将它清零的额外步骤)。我决定通过构建下面物理引擎的大规模简化版本并对不同的参考类型进行基准测试来进一步研究这一点。


import Foundation

final class Body {
    let shape: Shape
    var position = CGPoint()
    init(shape: Shape) {
        self.shape = shape
        shape.body = self
        
    }
}

final class Shape {
    weak var body: Body! //****** This line is the problem ******
    var vertices: [CGPoint] = []
    init() …
Run Code Online (Sandbox Code Playgroud)

performance weak-references strong-references swift unowned-references

8
推荐指数
1
解决办法
494
查看次数

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

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

  • 对象根本不能成为零.

我们打字很弱

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

我们打字无人打字

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

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

现在:

在我看来,以下句子,

绝对是真的......

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

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

因而是逻辑推论:

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

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

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

reference weak-references swift

6
推荐指数
1
解决办法
383
查看次数