память больше, чем система - PullRequest
0 голосов
/ 13 февраля 2019

Я хочу смоделировать нехватку хранилища, поэтому я пытаюсь копировать файлы, если хранилище заполнено, но я обнаружил, что до этого никогда не дойдет, и обнаружил, что занимаемое хранилище больше системного, как это может произойти?код выглядит следующим образом:

+ (void)copeFiles
{
    NSString *srcPath = [self cloudStorageCacheFolderPath];
    NSLog(@"copy: src path:%@ ,size:%f", srcPath, [self sizeOfcloudStorageCacheFolder]);
    int base = 300;
    int i = base;
    while (1) {
        i++;
        if (i > base + 100) {
            break;
        }
        NSInteger freeSizeM = [self freeFileStorageSize];
        if (freeSizeM > 1024) {
            NSString *newFilePath = [NSString stringWithFormat:@"%@-%d", srcPath, i];
            [self copyFolderContentFromSrc:srcPath toDestPath:newFilePath];
            NSLog(@"copy: i:%d, freeSizeM:%li", i, (long)freeSizeM);
        }else {
            break;
        }
    }
}
+ (void)copyFolderContentFromSrc:(NSString *)srcPath toDestPath:(NSString *)dstPath
{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSLog(@"copy: src:%@ dst:%@", srcPath, dstPath);
    BOOL isDir;
    if (![fileManager fileExistsAtPath:dstPath isDirectory:&isDir] || !isDir) {
        BOOL sucess = [fileManager createDirectoryAtPath:dstPath withIntermediateDirectories:YES attributes:nil error:nil];
        NSLog(@"copy: isDir:%d sucess:%d", isDir, sucess);
    }
    NSArray* array = [fileManager contentsOfDirectoryAtPath:srcPath error:nil];
    int i = 0;
    for (NSString *fileName in array) {
        i++;
        NSString *srcFullPath = [srcPath stringByAppendingPathComponent:fileName];
        NSString *toFullPath = [dstPath stringByAppendingPathComponent:fileName];
        NSError *error;
        BOOL isSucess = [fileManager copyItemAtPath:srcFullPath toPath:toFullPath error:&error];
        NSLog(@"copy:%d", i);
        if (!isSucess) {
            NSLog(@"copy:error:%@", error);
        }
    }
}

image1 image2 Изображения могут быть невидимыми, поэтому я описываю явление просто заранее. Мой iphoneВсего 32 ГБ, но в настройках указано доступное хранилище 93 ГБ.

1 Ответ

0 голосов
/ 13 февраля 2019

Да, он также увеличится, если вы запустите его снова:)

Причина этого заключается в том, что он будет хранить ссылку только на фактический файл.и я сделал то же самое в моей системе Mac, чтобы заполнить пространство для симулятора, и я в итоге получил ту же систему 256 ГБ, показывающую 4,3 ТБ пространства

  • В устройстве вы можете заполнить пространство, используя запись видеои все же вы не можете получить эту ошибку, потому что Apple будет управлять этим следующим образом.

1) Удалите все временные файлы, которые были сохранены в каталоге All App.

2) И затемОчистить кэш-память.

Apple очень хорошо справится с управлением пространством памяти, и в этом все еще есть какая-то загадка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...