コード解放しない:ループの中でNSKeyedArchiver archivedDataWithRootObject:メモリuseageこのような
NSMutableData *data = [NSMutableData dataWithLength:10*1024*1024];
for (int i = 0; i < 10; i++) {
NSData* archiveData = [NSKeyedArchiver archivedDataWithRootObject:data];
NSLog(@"%lu", (unsigned long)[archiveData length]);
}
設定されたブレークポイントを、それがメモリuseageが増加します表示されるように:10メガバイト - > 20メガバイト....-> 100MB、forループから外れてもメモリは解放されません。
処理を続行すると(次のメインループに入る可能性があります)、メモリ使用量は100MB減少します。
PS:ARCをオンにする/ ARCをオフにし、キーワードリリースを使用することは同じ結果です。
私は '' @ autoreleasepool'''を追加しようとしましたが、すぐにメモリを解放しません。私の問題はforループのメモリ使用量が大きすぎます。forループを '' 'dispatch_async '' '、それは動作しますが、私はこの解決策が嫌いです。 – waitianlou
これはあなたのループで何をするかによって異なります。あなたが与えた例は、 'archivedDataWithRootObject'が要求したメモリを直ちに解放しなければならないので、もっとコードを知らなくてももっと教えてもらえません。 –
あなたは大丈夫ですが、問題はUIPastebordのメモリが解放されていないことです。別の質問を投稿します、ありがとうございます。 – waitianlou