解雇后图像选择器内存崩溃
image picker memory crash after dismiss
我最近 4 天遇到了一个问题,即我必须简单地在上面有地图的视图控制器上打开相机,并且必须在画廊中保存点击的图像(原始大小),这样做时我的应用程序开始接收内存警告并在一段时间后崩溃 ..
我认为问题是每次关闭图像选择器时我的地图都会开始渲染。
特定 ios 和设备也会崩溃,即 ios 8.1.3 + iphone 4s。
如有任何建议,我们将不胜感激。
请帮忙。
在一个忙碌的周末之后,我找到了解决方案,虽然它是一个补丁,但对我有用。所以我所做的只是阻塞主线程,直到 imagepicker 控制器被关闭。
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
__weak typeof(picker) wSelf = picker;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[wSelf dismissViewControllerAnimated:YES completion:^{
@try {
[self saveImage:info];
}
@catch (NSException *exception) {
NSLog(@"Exception:%@",exception);
}
@finally {
}
}];});}
-(void)saveImage:(NSDictionary *)info{
[KAppdelegate ShowLoader];
UIImage *image=(UIImage *)[info objectForKey:@"UIImagePickerControllerOriginalImage"];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
dispatch_queue_t queue = dispatch_queue_create("com.myApp.saveToCameraRoll", NULL);
dispatch_async(queue, ^{
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
[library writeImageToSavedPhotosAlbum:[image CGImage] orientation:(ALAssetOrientation)[image imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error){
if (error) {
// handle the error
}
else {
dispatch_async(dispatch_get_main_queue(), ^{
// perhaps indicate to the user that save has finished
});
}
dispatch_semaphore_signal(sema);
}];
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
});}
我最近 4 天遇到了一个问题,即我必须简单地在上面有地图的视图控制器上打开相机,并且必须在画廊中保存点击的图像(原始大小),这样做时我的应用程序开始接收内存警告并在一段时间后崩溃 ..
我认为问题是每次关闭图像选择器时我的地图都会开始渲染。
特定 ios 和设备也会崩溃,即 ios 8.1.3 + iphone 4s。
如有任何建议,我们将不胜感激。
请帮忙。
在一个忙碌的周末之后,我找到了解决方案,虽然它是一个补丁,但对我有用。所以我所做的只是阻塞主线程,直到 imagepicker 控制器被关闭。
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
__weak typeof(picker) wSelf = picker;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[wSelf dismissViewControllerAnimated:YES completion:^{
@try {
[self saveImage:info];
}
@catch (NSException *exception) {
NSLog(@"Exception:%@",exception);
}
@finally {
}
}];});}
-(void)saveImage:(NSDictionary *)info{
[KAppdelegate ShowLoader];
UIImage *image=(UIImage *)[info objectForKey:@"UIImagePickerControllerOriginalImage"];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
dispatch_queue_t queue = dispatch_queue_create("com.myApp.saveToCameraRoll", NULL);
dispatch_async(queue, ^{
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
[library writeImageToSavedPhotosAlbum:[image CGImage] orientation:(ALAssetOrientation)[image imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error){
if (error) {
// handle the error
}
else {
dispatch_async(dispatch_get_main_queue(), ^{
// perhaps indicate to the user that save has finished
});
}
dispatch_semaphore_signal(sema);
}];
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
});}