【问题标题】:Memory leak after i take photo from UIImagePickerControllerSourceTypeCamera从 UIImagePickerController SourceType 相机拍照后内存泄漏
【发布时间】:2013-09-22 10:03:37
【问题描述】:

在我的应用程序中,我启动相机让用户拍照:

    UIImagePickerController *imagePickerControllerSubject = [[UIImagePickerController alloc] init];

    imagePickerControllerSubject.delegate = self;

    imagePickerControllerSubject.sourceType =  UIImagePickerControllerSourceTypeCamera;

    [self presentModalViewController:imagePickerControllerSubject animated:YES];

拍完照片后,我遇到了内存泄漏,你可以从 Xcode Instrument 看到我的截图。

我隔离了代码。我确定它来自相机,而不是来自我的应用程序,我的 didFinishPickingImage 函数中没有留下任何东西。

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo
    {

           [picker dismissModalViewControllerAnimated:YES];

           return;

    }

我使用 ARC,所以我不需要发布 imagePickerControllerSubject

这是来自 Xcode Instruments 的屏幕截图

我用的是最新版本的ios7

有什么想法吗?

谢谢

编辑

我在这里传递了我的视图控制器的整个代码。再简单不过了。并且不要忘记我只有在 iOS 7 和源类型是相机时才会出现这种内存泄漏。

    #import "FeedbackVC.h"

    @interface FeedbackVC ()

    @end

    @implementation FeedbackVC

    - (IBAction)onClickTakePicture
    {

        NSLog(@"onClickTakePicture");

        imagePickerControllerSubject = [[UIImagePickerController alloc] init];

        imagePickerControllerSubject.delegate = self;

        imagePickerControllerSubject.sourceType =               UIImagePickerControllerSourceTypeCamera;

        [self presentModalViewController:imagePickerControllerSubject animated:YES];

    }

     - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo
     {


         picker.delegate = nil;
         [self dismissViewControllerAnimated:NO completion:nil];
         picker = nil;

         NSLog(@"imagePickerController");

     }

     - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
     {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

        if (self)
        {
            // Custom initialization
            if (self)
            {
              self.navigationItem.title = @"Feedback";

              self.title = @"Feedback";

              self.tabBarItem.image = [UIImage imageNamed:@"second"];
            }

        }


        return self;
    }

    - (void)viewDidLoad
    {
       [super viewDidLoad];

    }

     - (void)didReceiveMemoryWarning
     {
          [super didReceiveMemoryWarning];
          // Dispose of any resources that can be recreated.
     }

     @end

【问题讨论】:

    标签: ios memory-leaks ios7 ios-camera


    【解决方案1】:

    在:

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo
    

    试试:

    picker.delegate = nil
    [self dismissViewControllerAnimated:NO completion:nil];
    picker = nil;
    

    【讨论】:

    • 没用 :( 我仍然有内存泄漏,只是在调用该方法之后。(并且仅当照片已被相机拍摄时)
    • @JeanFrançoisManatane 你有相机视图的叠加层吗?如果是这样,如果您发布一些代码会很有帮助。
    • 无覆盖 :( 我并没有真正使用相机,只是使用相机源类型的图像选择器。
    • 这已在 7.0.3 中修复
    猜你喜欢
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多