2

注: 上限があるかどうかを尋ねているのではなく、この質問は以前に尋ねられたことがあります。アプリ用に予約されている下限があるかどうかを尋ねています。

私のアプリはインターネットからコンテンツのパッケージをダウンロードします。ディスク容量が少ない/ない状態でアプリがどのように動作するかを調査しています。

パッケージには時間要素があり、スペースがない場合、アプリは古いコンテンツを自動的に削除して、新しいコンテンツ用のスペースを作ることができます。(パッケージは期限切れになる可能性があるため、ユーザーが明示的にパッケージを削除せずにパッケージを削除するのが標準的な動作です)。

ただし、すべてのディスク領域がすべてのアプリ間で共有されていて、他のアプリがデバイス上の利用可能なディスク領域をすべて使い果たしてしまい、アプリ用に何も残っていない場合、これは無意味です。別のアプリがすべてを消費して、自分のアプリに何も残さないというシナリオは可能ですか? それとも、アプリごとに予約されたスペースがありますか?

4

3 に答える 3

1

アプリが消費できる容量に制限はありません。理論的には、アプリは利用可能なすべてのディスク領域を使用できます。

于 2012-11-15T23:53:04.400 に答える
0

私の知る限り、実際の制限はありません。私は 1.6GB のフットプリントを持つアプリを使用してきましたが、問題はありませんでした。基本的に、利用可能なもので作業します。他の誰かが意地悪ですべてのスペースを占有している場合、それに対してできることはあまりありません。適切なポリシーは、「私のアプリはディスク上の 512 MB のスペースを使用します」などと述べ、それを決して超えないようにすることです。これにより、アプリが上限まで機能することに気付きます。どのモバイル デバイスでも経験則として、何かを保存するのに十分なスペースがあると想定しないでください。ディスクへの書き込み時に常にエラーをチェックし、それに対処するためのポリシーを用意してください。

これにさらに。アプリに常に十分なスペースがあることを保証したい場合。サイズの上限 (たとえば 256 mb) を選択し、アプリのインストール時と最初の実行時に、ディスク上のスペースを大量に消費するダミー ファイルを作成します。次に、有用なデータをダウンロードするときに、ダミー ファイルを有用なファイルに置き換えて、アプリが常に元の量の予約済みスペースを使用するようにします。

また、質問を少し誤解したようです。アプリ用に予約されている最小容量は、アプリ ストアからの新規ダウンロード時にアプリが占有するスペースです。それでおしまい。空き容量が 200 MB しかない場合に 300 MB のアプリをダウンロードしようとすると、ダウンロードできません。

于 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 に答える