私は、3Dモデルの細分化結果をオンザフライでプレビューする機能を含むアプリケーションを開発しました。ジオメトリを永久に変更する独自のcatmull clark細分割関数がありますが、SCNGeometryの.subdisionLevelプロパティを使用して、モデルを一時的にプレビューとして細分化します。ほとんどの場合、プレビューは自動的にユーザーが永続的なオプションに行くことを意味しません。デフォルトサードパーティライブラリのメモリリークの修正または回避
.subdisionLevelは、実際の細分化とスムージングを行うためのPixarのOpenSubdiv(回避策としてMDLMeshのサブディビジョンと同じように)を使用しています。それは私自身のものよりも速く動作しますが、もっと重要なのはSCNGeometryソースから提供する頂点データを永久に変更するものではありません。
問題は、メモリがリークするのを止めることができないということです。私は最初これを長い時間前に気づいた、それは私のコードの中にあったと思った。私はそれが単なる特定のIOSバージョンではないと思います。それはSwiftとObjective Cの両方で起こります。最終的に、XcodeのSceneKitゲームテンプレートにわずか1行追加し、船のsubdivisionLevelを1に設定します。すぐにメモリリークにつながる:
私は一週間前にアップルにバグレポートを提出したが、私はすぐに、またはまったく応答や修正をいつでも期待できるか分かりません。スクリーンショットは非常に小さなモデルのテストからのものですが、小さなモデル(何百から数千もの頂点)であっても、多くのものが漏れてしまい、アプリケーションがクラッシュすることにつながります。再現SceneKitゲームのテンプレートに基づいて、Xcodeで新規プロジェクトを作成し、handletapに以下の行を追加するには
:
if result.node.geometry!.subdivisionLevel == 3 {
result.node.geometry!.subdivisionLevel = 0
} else {
result.node.geometry!.subdivisionLevel = 3
}
(!削除Objective Cのために) はメガバイトをリークする船をタップして、それをもう少しタップすれば、それはすぐに追加されます。
OpenSubdivは3D Studio maxなどで使用されていますが、Appleの実装にあるようです。だから私の質問は、SceneKitの細分化機能を完全にあきらめずにこの問題を修正/回避する方法があるのか、それともAppleの唯一のチャンスであろうか?
Appleを待たずに、水平スクロールビューを使用するすべての双方向アプリケーションに影響する簡単なバグを修正するために、3つのiOSバージョンを使用しました。 – Yitzchak