限制Xcode中iOS应用程序的可用内存

时间:2015-03-01 20:34:43

标签: ios xcode memory exception-handling

我很好奇是否可以在调试时将可用内存限制在Xcode中的iOS应用程序中。我的应用程序能够使用AVCapture记录临时视频,我想测试用户的iDevice上是否有足够的内存,同时记录并处理didReceiveMemoryWarning内的异常。感谢。

编辑:我忘了提到我使用的是实际设备,但我拥有64GB版本,所以它可能需要一些时间才能达到这个限制,我希望最终用户将是拥有8GB iPhone的年轻人。

1 个答案:

答案 0 :(得分:0)

如果你想检查可用的Ram(didReceiveMemoryWarning)答案是否定的,iOS确定自己可用的内存。根据Apple文档,您需要使用实际设备。

  

尽管iOS模拟器是一个有用的工具,但永远不要让它成为唯一的方法   你测试一个应用程序。因为iOS模拟器是在Mac上运行的应用程序,所以它   可以访问计算机的内存,这比内存要大得多   在设备上找到的内存。由于内存增加,iOS   模拟器不是对应用程序内存使用情况的准确测试。为了这   同样的原因,总是测试应用程序用户界面的性能   在设备上。在iOS模拟器中,您的应用程序的用户界面可能会出现   比在设备上运行更快,更流畅。

但是,如果您想检查设备上的可用空间 - 可以完成!

-(uint64_t)getFreeDiskspace {
    uint64_t totalSpace = 0;
    uint64_t totalFreeSpace = 0;
    NSError *error = nil;  
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
    NSDictionary *dictionary = [[NSFileManager defaultManager] attributesOfFileSystemForPath:[paths lastObject] error: &error];  

    if (dictionary) {  
        NSNumber *fileSystemSizeInBytes = [dictionary objectForKey: NSFileSystemSize];  
        NSNumber *freeFileSystemSizeInBytes = [dictionary objectForKey:NSFileSystemFreeSize];
        totalSpace = [fileSystemSizeInBytes unsignedLongLongValue];
        totalFreeSpace = [freeFileSystemSizeInBytes unsignedLongLongValue];
        NSLog(@"Memory Capacity of %llu MiB with %llu MiB Free memory available.", ((totalSpace/1024ll)/1024ll), ((totalFreeSpace/1024ll)/1024ll));
    } else {  
        NSLog(@"Error Obtaining System Memory Info: Domain = %@, Code = %@", [error domain], [error code]);  
    }  

    return totalFreeSpace;
}

但请记住,当系统达到某个可用空间点时,iOS清理自身的iOS缓存文件夹。因此,手动填充它非常困难。