Iphone iOS UIImagePickerController和UIWebView导致内存问题;如何保留我的应用程序';陈述这些观点时的状态是什么?
我在我的应用程序中使用UIImagePickerController和UIWebView,将它们作为应用程序根控制器的模式视图控制器呈现。但是,在大部分时间内,这些都会导致内存警告,从而导致我的“正常”视图(应用程序的当前UI)被释放,并在模式视图完成时重新分配。例如,结果是,用户将选择“图像选择器”并使用相机拍照,但随后按“确定”并返回到一个已返回类似引导状态的应用程序(因此忘记了如何处理返回的图像)。这并不是100%都会发生(甚至50%),但足以成为一个大问题 我的问题是:是否有任何方法可以防止这种情况发生,即在显示这些模式视图时暂时减少内存占用,从而避免出现这种问题Iphone iOS UIImagePickerController和UIWebView导致内存问题;如何保留我的应用程序';陈述这些观点时的状态是什么?,iphone,objective-c,ios,Iphone,Objective C,Ios,我在我的应用程序中使用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++;
}
}
有趣的例子;我看到您正在手动释放缓存图像以帮助解决糟糕的相机问题。非常好。我实现了代码;我们将看到它是如何运行的。