로컬로 사용되는 함수에 부호없는 정수의 2 차원 배열을 몇 개 만들려고합니다. 그러나 앱이 배경으로 이동할 때 충돌이 발생합니다. 배경 작업에ios 응용 프로그램의 백그라운드에서 메모리 할당이 실패합니다.
:
- (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가 응용 프로그램을 일시 중지 했습니까? 또한이 문제를 해결할 수있는 방법이 있습니까?
감사합니다.
P.S : IOSurfaces (개인 iOS API의 일부)를 사용하여 백그라운드에서 생성 및 릴리스했으며이 문제가 발생하지 않았습니다.
논리적으로 보입니다. 감사. –