美文网首页
005 怎样用代码方式将iPhone 手机存储空间占满

005 怎样用代码方式将iPhone 手机存储空间占满

作者: UNV_iOS | 来源:发表于2019-02-15 15:09 被阅读0次

    今天测试那边需要测试一种异常情况,需要让iPhone的手机存储空间占满,网上没找到好的方法,于是就自己尝试了下,遇到一些坑在这里记录一下。

    把手机空间占满,第一个想到的就是使用文件复制的方法,将APP内的文件复制直到占满空间。
    测试的时候,发现代码一直在复制操作,丝毫没有停下来的意思。然后再去手机系统中查看,发现了可怕的事情。如下图:


    图片1

    后面去stackoverflow上问了下,大概的原因是,iOS中复制文件时,并不是真的复制,而只是增加索引,导致存储空间并不能真正被占满。
    原问题

    接下来,就想到使用真正写入文件的方式,我使用的方式是直接将一个字符串写入到文件中,直到文件占满。

    测试时,又发现,每次获取到的剩余空间也不准确,导致会一直复制。
    获取剩余空间的代码如下:

    /**
     *  手机剩余存储空间大小,单位为M,查询失败返回-1
     *
     *  @return 单位Mb
     */
    + (NSInteger)freeFileStorageSize
    {
        NSError *error = nil;
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSDictionary *dictionary = [[NSFileManager defaultManager] attributesOfFileSystemForPath:[paths lastObject] error: &error];
        if (dictionary) {
            NSNumber *freeSizeObj = [dictionary objectForKey:NSFileSystemFreeSize];
            return [freeSizeObj unsignedLongLongValue] * 1.0 / 1024.0 / 1024.0;
        }
        UVILog(@"get phone free storage size failed, error:%@", error);
        return -1;
    }
    

    最终只能通过点击一次按钮,创建一定大小的文件的方法来曲线救国,实现将手机占满的需求。

    在这个过程中,还有两个问题有没想明白:
    1、在写入文件时,内存占用会快速升高,导致内存占用过高,但写入完成后会很快降下来。如正常情况下手机占用50M,但在复制时会迅速升高到900M,然后又很快降回50M。
    写入的代码如下:

    + (void)writeUselessFileToPath:(NSString *)filePath content:(NSString *)content
    {
        NSFileManager *fileManager = [NSFileManager defaultManager];
        if(![fileManager fileExistsAtPath:filePath]) //如果不存在
        {
            [content writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
        }
        NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:filePath];
        for (int i = 0; i < 100; i++) {
            [fileHandle seekToEndOfFile];  //将节点跳到文件的末尾
            NSData* stringData  = [content dataUsingEncoding:NSUTF8StringEncoding];
            [fileHandle writeData:stringData]; //追加写入数据
        }
        [fileHandle closeFile];
    }
    

    2、将空间占满后,打开设置,然后等一会,再打开设置,看到的剩余内存是不一样的。如占满后显示1.0G,过一会打开又显示3.0G。
    使用三方的APP看剩余内存时,显示一直没变。
    使用的APP是系统监控。

    相关文章

      网友评论

          本文标题:005 怎样用代码方式将iPhone 手机存储空间占满

          本文链接:https://www.haomeiwen.com/subject/nrapeqtx.html