そのため、アプリはスタック トレースや例外なしでクラッシュし、毎回このクラッシュを再現できました。私が最初に考えたのは、これは 2 回のリリースでなければならないということでした。ゾンビを 10 分間実行した後、アプリをクラッシュさせることは一度もありませんでした。
Allocations を見た後、メソッドが呼び出されると、割り当てられたオブジェクトのサイズが大幅に増加することに気付きました。そのため、for ループ内に @autoreleasePool を配置することになりました。この自動解放プールはクラッシュを修正しました。しかし、これが本当にメモリ不足の問題であることを確認するにはどうすればよいですか? (didRecieveMemoryWarning はクラッシュ前に呼び出されませんでした)
autoreleasePool が問題を解決するのはなぜですか?
didRecieveMemoryWarning が呼び出されないのはなぜですか? 現在の実行ループの最後に到達する前に、アプリケーションがメモリを使い果たしたためでしょうか?
- (void)doSomething
{
for (Item *item in self.items)
{
@autoreleasepool
{
// A bunch of initializations here that take a lot of memory
}
}
}