我正在用 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
在Swift中,我们有正常的默认输入
我们打字很弱
我们打字无人打字
(所以:通过推论:你可以使用"无主"的唯一一次是,如果你"绝对知道"该对象将永远不会变为零.)
现在:
在我看来,以下句子,
绝对是真的......
绝对地,我的意思是,真的,真的,绝对,直到最深刻的哲学关注真实......
因而是逻辑推论:
{旁白 - 我能想到的唯一其他差异在于自我记录的意义.如果我使用无主,它会让我的开发人员知道某些事情; 让我们暂时搁置这个问题.)
所以我的问题很简单,非常准确,非常具体:大胆的句子高于"真实"(在"完全,非常,非常,真实"的真实意义上).