0

私は他のスレッドを見たことがありますが、私のものはさらに劇的なようです。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
    }];
}
4

0 に答える 0