2

注意:我不是在问是否有最大值,这个问题之前已经被问过,我是在问是否还有为应用程序预留的最小值。

我的应用程序从 Internet 下载内容包,我正在调查它在低/无磁盘空间条件下的表现。

这些包有一个时间元素,如果没有空间,那么应用程序可以自动删除旧内容,以便为新内容腾出空间。(这些包可能会过期,因此在没有用户明确删除它们的情况下将它们删除是标准行为)。

但是,如果所有应用程序之间共享所有磁盘空间并且某些其他应用程序已经吞噬了设备上的所有可用磁盘空间,那么这将毫无意义,这样我的应用程序就什么都没有了。这种情况是否可能,另一个应用程序可以消耗所有内容,而我的应用程序什么也没有?或者每个应用程序是否保留了一些空间?

4

3 回答 3

1

应用程序可以使用的空间量没有限制。理论上,应用程序可以使用所有可用的磁盘空间。

于 2012-11-15T23:53:04.400 回答
0

AFAIK没有实际限制。我一直在使用一个占用 1.6GB 的应用程序,并且没有遇到任何问题。从本质上讲,您使用可用的东西,如果其他人刻薄并占据所有空间,那么您无能为力。一个好的策略可能是声明“我的应用程序将使用 512mb 的磁盘空间”或类似的东西,然后确保你永远不会超过这个值。这会让您放心,您的应用程序可以运行到上限。任何移动设备上的经验法则,永远不要假设你有足够的空间来存放任何东西,在写入磁盘时总是检查失败,并有一个处理它的策略。

更进一步。如果你想保证你的应用总是有足够的空间。选择一个大小上限(比如 256 mb),然后在安装和首次运行您的应用程序时,创建占用大量磁盘空间的虚拟文件。然后,当您下载有用的数据时,将虚拟文件替换为有用的文件,以便您的应用始终使用原始保留空间量。

我似乎也有点误解了这个问题。为您的应用程序保留的最小空间是从应用程序商店重新下载所占用的空间。就是这样。如果你只有 200mb 的免费空间并且你尝试下载一个 300mb 的应用程序,它不会让你。

于 2012-11-15T23:53:36.003 回答
0

在写入磁盘之前,您可以检查可用磁盘空间的数量并相应地提醒用户。

-(uint64_t)getFreeDiskspacePrivate
{
uint64_t totalSpace = 0.0f;
uint64_t totalFreeSpace = 0.0f;
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 floatValue];
    totalFreeSpace = [freeFileSystemSizeInBytes floatValue];
    //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;
}
于 2012-11-16T05:35:42.040 回答