gpt4 book ai didi

iOS SceneKit 应用程序在 App 切换器模式下更快

转载 作者:搜寻专家 更新时间:2023-11-01 06:52:20 25 4
gpt4 key购买 nike

我在开发 SceneKit 应用程序时遇到了一个相当奇怪的行为。我调用了一个方法来操作各种 SCNNode 对象的 simdWorldPosition 属性。该方法在循环中更改 simdWorldPosition,循环可执行约 40k 次。

我定义了一个 DispatchQueue:

let updateQueue = DispatchQueue(label: Bundle.main.bundleIdentifier! +
".serialSceneKitQueue")

按下按钮会调用以下内容:

@objc func didPressGreedy() {
updateQueue.async {
let _ = self.Greedy()
}
}
autoreleasepool {
for offset in stride(from: 0.0, through: planeWidth, by: increment) {
var topLeftTransform = arkitAnchor!.simdWorldTransform * HelperMethods.makeTranslationMatrix(tx: -Float(planeWidth / 2), ty: 0.0, tz: -Float(planeHeight/2))
topLeftTransform = topLeftTransform * HelperMethods.makeTranslationMatrix(tx: Float(offset), ty: 0.0, tz: 0.0)
let topEdgePosition = simd_float3(x: topLeftTransform.columns.3.x, y: topLeftTransform.columns.3.y, z: topLeftTransform.columns.3.z)
saLabelComponent.simdWorldPosition = topEdgePosition

let oldSpriteTransform = sprite.simdWorldTransform

for xOffset in stride(from:-0.20, through: 0.20, by: increment) {
for yOffset in stride(from: 0.05, through: 0.20, by: increment) {
LOOP_1_ITERATIONS += 1
var newSpriteTransform = anchor.simdWorldTransform * HelperMethods.makeTranslationMatrix(tx: Float(xOffset), ty: Float(yOffset), tz: 0.0)
sprite.simdWorldTransform = newSpriteTransform
}
}
}
}

这些迭代很慢 - 有时我可以看到在几秒钟内发生大约一千次操作,然后需要一分钟才能完成 50 次 simdWorldPosition 更新。如果我点击屏幕,我可以看到执行速度加快了。

当我使用 iOS App Switcher(只需在 iPhone XS 上向上滑动应用程序并将其置于 App Switcher 中)时,该应用程序将迭代执行速度显着提高了 10 倍。

知道为什么会这样吗?如果我遇到概念性问题,请指向相关主题/文章。

最佳答案

Any idea of why this is caused?

听起来您的应用在切换器中只是做的工作少了很多。这并不奇怪...应用程序绘制的区域较小,没有要处理的触摸事件等。差异可能与您循环中的代码关系不大事实证明,应用程序的其余部分没有做那么多。

如果您真的想知道发生了什么(或没有发生什么),最好的办法是使用 Instruments 分析您的代码。

关于iOS SceneKit 应用程序在 App 切换器模式下更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56343953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com