解雇后图像选择器内存崩溃

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);

});}