내 중앙 애플 리케이션에서이 문제가 발생했습니다. 저장시 그랜드 센트럴 디스패치를 사용했습니다.
다음은 이미지 캐시 클래스의 setImage 메소드입니다. UIImage에 이미지가 저장되어 있으면 이미지를 저장하고 그렇지 않으면 삭제합니다. 희망에 맞게이 기능을 적용 할 수 있으며 iOS 4 이상에서만 작동합니다. 코드에서 ARC를 사용할 수 있습니다.
-(void)setImage:(UIImage *)image{
if (image == nil){
NSLog(@"Deleting Image");
// Since we have no image let's remove the cached image if it exists
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,
NSUserDomainMask, YES) objectAtIndex:0];
[[NSFileManager defaultManager] removeItemAtPath:[cachePath
stringByAppendingPathComponent:@"capturedimage.jpg"] error:nil];
});
}
else {
NSLog(@"Saving Image");
// We've got an image, let's save it to flash memory.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSString *cachePath =
[NSSearchPathForDirectoriesInDomains(NSCachesDirectory,
NSUserDomainMask, YES) objectAtIndex:0];
NSData *dataObj = UIImagePNGRepresentation(image);
[dataObj writeToFile:[cachePath
stringByAppendingPathComponent:@"capturedimage.jpg"] atomically:NO];
});
}
imageCache = image;
}
흥미로운 질문입니다. 안드로이드는 써드 파티 앱을 위해하는 것처럼 자신의 카메라 앱에 대해 동일한 코드 ("액티비티")를 사용하는 것처럼 보입니다. 즉, 이미지를 저장하는 데 걸리는 시간과 동일한 시간이 걸립니다. 이상하게도 애플은 비슷한 일을하지 않는다. – jrockway