これは奇妙な質問のように聞こえるかもしれませんが、私はIOS 5の面白い問題があります。私たちは大規模なテクスチャをスクロールしています。すべてのデバイス(IOSの4.3GBの古い3GSでも)より高いOSを搭載したデバイスでは、64GBのiPhone 4Sのような最新の&でさえ、重要な吃音を得ることができます。おそらく、マルチタスキングの優先順位を高くし、資源を解放するのではなく、知るのが難しいかもしれないと考えています。メモリを後で解放する目的でメモリを埋める方法は?
メモリをいっぱいにするために(アプリケーション起動時に)何かしたいと思います。メモリ警告をトリガするので、システムはより多くのものを取り除き、私が書き込んだメモリを解放します(私は明らかにしません最終的なアプリでこれを残そうと思っています...)。おそらくこれは、私たちの疑惑がうまく確立されているかどうかを私に示すでしょう。
これまでのところ、私はメモリを埋めるために持っているコードはこれです -
- (void) applicationDidFinishLaunching:(UIApplication*)application {
memoryFilled = NO;
[self useUpMemory];
}
- (void) useUpMemory {
if (memoryFilled) return;
NSData *dummyData = [[NSData alloc] initWithBytes:malloc(1024 * 1024) length:1024 * 1024];
[dummyArray addObject:dummyData];
[dummyData release];
printf_console("Filling memory\n");
[self performSelector:@selector(useUpMemory) withObject:nil afterDelay:0.05];
}
- (void) applicationDidReceiveMemoryWarning:(UIApplication*)application {
memoryFilled = YES;
[dummyArray release];
printf_console("WARNING -> applicationDidReceiveMemoryWarning()\n");
}
しかし、何らかの理由で、メモリがトリガされることはありません&警告をいっぱいにすることはありません。私は後でそれを解放することができるメモリを埋める方法はありますか?
任意の助けに感謝(私はこれを行うべきではない私に教えないでください! - 私が言ったように、それはただのテストです)
'-initWithBytes:length:'はあなたが入れた情報をコピーします。つまり、何もしないmallocで100万バイトを浪費しています。代わりに、 'NSMutableData's''の' initWithLength: 'メソッドを使うことをお勧めします。 –
ログに「Filling memory」と表示される回数は何回ですか? –
まだ停止していない...(下のBenedict Cohenのソリューションを参照) – SomaMan