メモリ不足の状態でアプリの機能をテストしたいのですが、テストするのが難しいです。アプリがシミュレーターではなくデバイスで実行されているときに、ビューでdidReceiveMemoryWarningメソッドをトリガーするメモリ不足の警告をどのように誘導できますか?または、これらの可能な条件下でアプリをテストする方法は何ですか?
シミュレーターを使用できない理由は、私のアプリがGame Centerを使用していて、招待状がシミュレーターで機能しないためです。
メモリ不足の状態でアプリの機能をテストしたいのですが、テストするのが難しいです。アプリがシミュレーターではなくデバイスで実行されているときに、ビューでdidReceiveMemoryWarningメソッドをトリガーするメモリ不足の警告をどのように誘導できますか?または、これらの可能な条件下でアプリをテストする方法は何ですか?
シミュレーターを使用できない理由は、私のアプリがGame Centerを使用していて、招待状がシミュレーターで機能しないためです。
回答:
デバイスでテストするには、メモリを解放せずに定期的に大きなメモリチャンクを割り当てるコードを追加します(つまり、意図的にリークします)。これは、別のスレッドで、またはタイマーに応答して、またはアプリケーションの動作をテストおよび監視するのに最適なメカニズムを使用して行うことができます。
これを簡単に再利用したり、複数のアプリケーションでテストしたりする場合は、同様の処理を行い、バックグラウンドで実行するように設計された別のアプリを作成することもできます。
あなたはプライベートメソッドを呼び出すことができます:
[[UIApplication sharedApplication] performSelector:@selector(_performMemoryWarning)];
デバッグ時にのみ使用することを忘れないでください。そうしないと、アプリが拒否されます。
po [[UIApplication sharedApplication]performSelector:@selector(_performMemoryWarning)]
expr (void)[[UIApplication sharedApplication] performSelector:@selector(_performMemoryWarning)];
expr (void)[[UIApplication sharedApplication] _performMemoryWarning]
expr UIApplication.sharedApplication().performSelector("_performMemoryWarning")
通常の代わりにタイプする#selector
iOSシミュレータのSimulate Memory Warning
メニュー項目では、メモリ警告をシミュレートできます。
SwiftでEnzo Tranの回答を書き直しました。
UIControl().sendAction(Selector(("_performMemoryWarning")), to: UIApplication.shared, for: nil)
誰かが何らかの理由でSwift 4でこれを実行しようとした場合-1.2 GBのRAMを割り当てる方法は次のとおりです。
let d = Data.init(repeating: 100, count: 1200000000)
それを呼び出すメニューコマンドがあります。
Hardware > Simulate Memory Warning
シミュレータから。
誰かが何らかの理由でSwift 3でこれを実行しようとした場合-1.2 GBのRAMを割り当てる方法は次のとおりです。
for i in 0...1200 {
var p: [UnsafeMutableRawPointer] = []
var allocatedMB = 0
p.append(malloc(1048576))
memset(p[allocatedMB], 0, 1048576);
allocatedMB += 1;
}
スウィフト4:
UIApplication.shared.perform(Selector(( "" _ performMemoryWarning ")))
イベント/通知に応答して上記を実行できます。