私は他のスレッドを見たことがありますが、私のものはさらに劇的なようです。UIImagePickerControllerを使用して、ユーザーが自分の写真を選択または撮影できるようにしています。
ここにいくつかのコードがあります:
if (([UIImagePickerController isSourceTypeAvailable:
UIImagePickerControllerSourceTypeCamera] == NO))
return NO;
ImagePickingViewController *cameraUI = [ImagePickingViewController sharedImagePickingController];
cameraUI.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
cameraUI.allowsEditing = NO;
cameraUI.delegate = self;
[self presentViewController:cameraUI animated:YES completion:^{
//do nothing
}];
これが実行されるとすぐに、私のメモリ割り当ては最大3MBから6MBのアクティブメモリになります。そして、キャンセルを押してビューを閉じると、メモリは6MBのままです!! 画像を選択すると、さらに高くなり、何度もクラッシュします。
何か案は?
iOS 6を実行していて、ARCを使用していません。
[編集]:これが私のクラスラッパーのないコードです。それはまったく同じことをします-ビューが表示されているときに3MBのメモリをリークし、ビューが閉じられた後でも元に戻ることはありません。
if (([UIImagePickerController isSourceTypeAvailable:
UIImagePickerControllerSourceTypeCamera] == NO))
return NO;
UIImagePickerController *cameraUI = [[UIImagePickerController alloc] init];
cameraUI.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
cameraUI.allowsEditing = NO;
cameraUI.delegate = self;
[self presentViewController:cameraUI animated:YES completion:^{
//do nothing
}];
そしてここにデリゲートメソッドがあります
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
NSLog(@"Image picker finished picking.");
[self.navigationController dismissViewControllerAnimated:NO completion:^{
//do nothing
}];
[self dismissViewControllerAnimated:NO completion:^{
//do nothing
}];
UIImage *originalImage = (UIImage *)[info objectForKey:
UIImagePickerControllerOriginalImage];
//Do stuff with image
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
[loadingViewController.view removeFromSuperview];
[self dismissViewControllerAnimated:YES completion:^{
//Do stuff
}];
}