初めてSceneKitとSpriteKitとARCを使用してアプリケーションを作成し始めました。私は、異なるビュー間で切り替えると、メモリ使用量が急速に増えていることに気付きました。私の最初の考えは、私はメモリリークがあったが、私は今確信していない。動作も、この基本的な例で発生します。メモリが完全に解放されていない
for(int r=0;r<9999999;r+=1){
NSString *s=[NSString stringWithFormat:@"test%i",r];
s=nil;
}
私の理解から、NSStringのオブジェクトが作成され、直接このループで放出されます。私はこの例をiPhone-SimulatorとiPhoneで試してみました。このループが実行された後、アプリは数百MBのRAMを使用します。 (私はXcodeデバッグナビゲータでメモリ使用量をチェックしています)
私は明らかに何かを誤解しています。なぜこの例はまだメモリを保持していますか?
編集:
また、新しいプロジェクトを作成することができます。その後のviewDidLoadにこれを追加しSceneKit
:iOS版 - - >ゲーム>ゲームテクノロジーを
for(int r=0;r<999999;r+=1){
SCNNode *tn=[SCNNode node];
tn=nil;
}
メモリを意志550MBでピークに達し、オブジェクトが完全に解放されてRAMから削除された場合は300MBになります。
ところで、あなたはメモリの圧力をシミュレートしようとするかもしれません。 Cocoaオブジェクトはあらゆる種類のキャッシングを行いますが、その中にはメモリ警告があるときにパージされるものもあります。また、あなたのスキームでメモリデバッグオプション(特にゾンビ)をオンにした場合、メモリがさらに増加し、リーク、放棄、またはキャッシュメモリを分析する前にそれらをオフにしたい場合があることに注意してください。 – Rob
この問題を解決してくれてありがとう。私はゾンビをオンにしていませんでしたが、あなたのアドバイスによってすべてのデバッグ設定が無効になり、問題が解決しました。したがって、この問題はすべてデバッグ機能に関連しています。 – KugelnMMXVI
優れています。私はそれを私の答えに組み込んだ。 – Rob