iOSメモリ圧迫テストを実現する

iOSでメモリ圧迫時にkeyChainを読み込めないバグがあるという話を聞いたので、試してみる為に、 一旦メモリ圧迫時の環境をつくる事にしました。

今回やりたい事は、メモリ圧迫時の環境をつくる。なので、デブッグしたい処理の直前で、メモリを確保して圧迫してみようと思います。

以下のメソッドを追加しましょう。

void *_pointerArray[1024 * 1024];

static void *AllocateDirtyBlock(NSUInteger size)
{
    Byte *block = malloc(size);
    for (NSUInteger offset = 0; offset < size; offset++) {
        block[offset] = offset & 0xff;
    }
    return block;
}

メモリを確保する時にはこんな感じで確保します。

int times = 900; // <<<<<<<<<<< 使用デバイスによって違うのでいい塩梅見つけて!
for (int i = 0; i < times; i++) {
    _pointerArray[i] = AllocateDirtyBlock(256 * 1024);
} 

メモリを解放する時にはこんな感じで解放します。

for (int i = 0; i < times; i++) {
    if (_pointerArray[i] != NULL) {
        free(_pointerArray[i]);
        _pointerArray[i] = NULL;
    }
}