wgp*_*ubs 22 iphone objective-c uiimagepickercontroller didreceivememorywarning
这真让我抓狂!!!
每当我尝试使用sourceType = UIImagePickerControllerSourceTypeCamera显示UIImagePickerController时,我都会收到"已接收内存警告.级别= 1".
这是我在viewDidLoad中设置的代码:
- (void)viewDidLoad {
[super viewDidLoad];
// Set card table green felt background
self.view.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"green_felt_bg.jpg"]];
// Init UIImagePickerController
// Instantiate a UIImagePickerController for use throughout app and set delegate
self.playerImagePicker = [[UIImagePickerController alloc] init];
self.playerImagePicker.delegate = self;
self.playerImagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
}
Run Code Online (Sandbox Code Playgroud)
这是我如何以模态呈现它..
- (IBAction) addPlayers: (id)sender{
[self presentModalViewController:self.playerImagePicker animated:YES];
Run Code Online (Sandbox Code Playgroud)
}
结果...... UIImagePicker开始显示然后繁荣......我得到了记忆警告......每一次!有趣的是,如果我切换到sourceType = UIImagePickerControllerSourceTypePhotoLibrary ......一切正常.
我错过了什么或做错了什么?我想做的就是显示相机,拍摄并保存图片.
仅供参考 - 我正在测试我的3GS设备.
感谢任何能提供帮助的人 :)
它不是关于你的应用程序使用了多少内存,因为即使你编写一个非常简单的应用程序,只有一个视图只有一个按钮,单击按钮然后打开相机,它可能会发生.我已经在iPhone 3GS,iPad 2和iPod touch 3G上进行了测试.它只发生在iPhone 3GS上.我发现如果你在执行应用程序之前重新启动设备,它就不会再发生了.
另一个真正的解决方案是[super didReceiveMemoryWarning]
在viewController中注释代码.
- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
Run Code Online (Sandbox Code Playgroud)
在使用iOS 4.3.2对iPhone 3GS进行大量测试后,我发现逻辑可能是这样的: - >打开与在背景上运行的应用程序一样多 - >呈现UIImagePickerController的imagePicker,从imagePicker单击"返回"或"保存" - > applicationDidReceiveMemoryWarning:(UIApplication *)application
将调用ApplicationDelegate的方法- >然后调用ViewController的方法didReceiveMemoryWarning:
- >然后调用viewDidUnload - >然后调用viewDidLoad
然后你可以找到一些已经发布的视图,并且当前视图已指向意外的视图.
默认情况下,[super didReceiveMemoryWarning]
将在didReceiveMemoryWarning
调用ViewController的方法时运行.谈到它,并viewDidUnload:
和viewDidLoad:
方法将不会被调用.这意味着mem警告已被完全忽略.这就是我们的预期.
现在我升级到4.0后,它也发生在我的应用程序中 - 在3.1之前没有警告.
实际上正如你之前所说,应该没有问题.但是,这会导致再次加载后调用视图并调用viewDidLoad.这会弄乱我的应用程序,因为我在viewDidLoad中初始化视图 - 现在它再次被初始化 - 即使它不应该.
就像评论一样,这可能也会发生在许多其他只依赖加载视图一次的应用程序中!
归档时间: |
|
查看次数: |
41234 次 |
最近记录: |