0

キウイテスト ケースを使用して、メモリ警告機能を受信したことを確認する問題に直面しています。機能を確認するには?

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

キウイのテストケースについて知っている人はいますか?

4

1 に答える 1

1

メソッドを直接呼び出すだけです。

it(@"Should cleanup when receiving a memory warning", ^{
    [controller didReceiveMemoryWarning];
    // assert here that the data that you expected was released
});

このアプローチでnil-edは、メモリ警告が発生した場合に予想されるコントローラーのプロパティを確認する必要があります。

または、単体テスト アプリのメモリ使用量を確認し、シミュレートされたメモリ警告の後にメモリが減少したかどうかを確認できます。これは最初のアプローチほど正確ではありませんが、いくつかのヒントを得ることができます。また、コントローラーが画面にレンダリングされることを確認するか、少なくともレンダリングされたと認識させて、ビュー/テーブルビューセルなどの構築を開始する必要があります.

it(@"Should cleanup when receiving a memory warning", ^{
    vm_size_t memoryBeforeMemWarning;
    vm_size_t memoryAfterMemWarning;
    MyController *controller = nil;

    @autoreleasepool {
        controller = ...;
        // call controller.view, or other methods that create the view
        // also call any other methods that trigger subview creation

        memoryBeforeMemWarning = getMemUsage();
        //simulate the memory warning
        [controller didReceiveMemoryWarning];
    }
    memoryAfterMemWarning = getMemUsage();

    // reference the variable here to make sure ARC doesn't
    // release it when it detects its last reference
    controller = nil;

    // now assert upon the difference between the two reported memory usages
});

autorelease poolで作成されたオブジェクトを制御するには、 を使用する必要があります。これらのオブジェクトは、メインがドレインされたときではなく、スコープが終了しautoreleaseたときに解放されるためです。ノート。の実装は追加しませんでした。実装方法については、こちらを参照してくださいautorelease poolautorelease pool
getMemUsage()

于 2015-12-28T07:58:20.503 に答える