【发布时间】:2017-09-19 01:58:19
【问题描述】:
我的应用使用标准 UINavigationViewController。
在某些时候,用户已经导航到一个显示 SceneKit 场景的 ViewController。
这个场景的内存非常重,因为它有大约 6000 个几何图形,每个几何图形都有自己的材质(必须这样)。
当用户单击顶部栏的后退按钮以返回上一个 viewController 时,应用会正确弹出当前的 View Controller 并显示如下。
但是,显示的新 ViewController 的 UI 冻结了大约 4 秒。
我使用了 Instruments Time Profiler,我可以看到这 4 秒中的很大一部分是由这些 SceneKit 方法占用的:
-[NSConcreteMapTable countByEnumeratingWithState:objects:count:]
-[SCNMetalResourceManager _geometryWillDie:]
-[SCNMetalResourceManager _materialWillDie:]
这是有道理的,因为有这么多的几何形状和材料。
我该如何解决这种情况,以便在释放繁重的场景时 UI 不会被阻塞,无论是从 SceneKit 角度(使释放更快)还是从 UINavigationViewController 角度(可能会强制场景的释放发生在单独的线程?)。
【问题讨论】:
标签: ios uinavigationcontroller scenekit