ローカルで使用される関数で、符号なし整数の2次元配列をいくつか作成しようとしています。ただし、アプリがバックグラウンドに移動するとクラッシュします。その後、次のコードを試しました。
バックグラウンドタスクの場合:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
if([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]){
if([[UIDevice currentDevice] isMultitaskingSupported]){
__block UIBackgroundTaskIdentifier bgTask;
UIApplication *application = [UIApplication sharedApplication];
bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//[self captureImage];
[self memCheck];
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
});
}
}
}
関数:
-(void) memCheck{
size_t XY[768][1024];
for(int i=0;i<768; ++i){
for(int j=0;j<1024;++j){
XY[i][j]=1;
}
}
}
上記のテストコードスニペットにより、アプリがクラッシュします。しかし、768 * 1024*4ではなく768*4バイトだけを割り当てようとすると、正常に機能します。
メモリの肥大化やその他の理由でOSがアプリを一時停止しているのでしょうか。また、これに対する回避策はありますか?
ありがとう。
PS:私はIOSurfaces(プライベートiOS APIの一部)を使用し、バックグラウンドでそれらを作成してリリースしましたが、この問題は発生しませんでした。