Iphone iOS UIImagePickerController和UIWebView导致内存问题;如何保留我的应用程序';陈述这些观点时的状态是什么?

Iphone iOS UIImagePickerController和UIWebView导致内存问题;如何保留我的应用程序';陈述这些观点时的状态是什么?,iphone,objective-c,ios,Iphone,Objective C,Ios,我在我的应用程序中使用UIImagePickerController和UIWebView,将它们作为应用程序根控制器的模式视图控制器呈现。但是,在大部分时间内,这些都会导致内存警告,从而导致我的“正常”视图(应用程序的当前UI)被释放,并在模式视图完成时重新分配。例如,结果是,用户将选择“图像选择器”并使用相机拍照,但随后按“确定”并返回到一个已返回类似引导状态的应用程序(因此忘记了如何处理返回的图像)。这并不是100%都会发生(甚至50%),但足以成为一个大问题 我的问题是:是否有任何方法可以

我在我的应用程序中使用UIImagePickerController和UIWebView,将它们作为应用程序根控制器的模式视图控制器呈现。但是,在大部分时间内,这些都会导致内存警告,从而导致我的“正常”视图(应用程序的当前UI)被释放,并在模式视图完成时重新分配。例如,结果是,用户将选择“图像选择器”并使用相机拍照,但随后按“确定”并返回到一个已返回类似引导状态的应用程序(因此忘记了如何处理返回的图像)。这并不是100%都会发生(甚至50%),但足以成为一个大问题

我的问题是:是否有任何方法可以防止这种情况发生,即在显示这些模式视图时暂时减少内存占用,从而避免出现这种问题


这是非常令人沮丧的,因为一旦UIImagePickerController模式启动,我几乎无法控制应用程序。。。当返回图像时会出现内存警告,所以我没有机会处理这个问题。到目前为止,我已尝试在模式启动时从根视图中删除所有视图,但运气不佳:(

你的问题对每个人来说都很明显,甚至我也面临着这个问题。实际问题在于iPhone ImagePickerController摄像头……苹果可能知道这个问题,并可能正在试图解决这个问题……除此之外,我们能做的就是遵循内存管理规则

这是一个很好的教程

我使用下面的代码来管理我的应用程序中的内存…它在某种程度上对我有用,但不能完全修复它

   -(void)applicationDidReceiveMemoryWarning:(UIApplication *)application 
    {

        NSFileManager *manager = [NSFileManager defaultManager];
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
        NSString *diskCachePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"ImageCache"];
        if ([manager fileExistsAtPath:diskCachePath])
        {
            NSError *error=nil;
            NSArray *files = [manager contentsOfDirectoryAtPath:diskCachePath 
                                                          error:&error];
            if(!error)
            {
                for(NSString *file in files) {
                    [manager removeItemAtPath:[diskCachePath stringByAppendingPathComponent:file]
                                        error:nil];

                }
            }
        }


        int i=0;
        for(id controller in self.tabBarController.viewControllers)
        {
            if(i==presentTabIndex)
            {
                i++;
                continue;
            }
            if([controller isKindOfClass:[UINavigationController class]])
            {
                UINavigationController *aController = (UINavigationController *)controller;
                [aController popToRootViewControllerAnimated:YES];
            }
            else if([controller isKindOfClass:[UIViewController class]])
            {
                UIViewController *aController = (UIViewController *)controller;
                [aController.navigationController popToRootViewControllerAnimated:YES];
            }

            i++;
        }
    }

有趣的例子;我看到您正在手动释放缓存图像以帮助解决糟糕的相机问题。非常好。我实现了代码;我们将看到它是如何运行的。