2012-05-23 4 views
5

Я использую UIImagePickerController в своем приложении, разрабатывающемся на iOS5 & XCode4.2, получая утечку памяти, и я не знаю, почему я получаю эту утечку, можете ли вы, пожалуйста, дать мне ответ на этот вопрос.Утечка памяти UIImagePickerController на iOS5

here i am attaching my screen shot:

и мой код:

-(void)createImagePicker 
{ 
_picker = [[UIImagePickerController alloc] init]; 
_picker.sourceType = UIImagePickerControllerSourceTypeCamera; 

_picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto; 

_picker.allowsEditing = YES; 
_picker.showsCameraControls = NO; 


_picker.cameraDevice = UIImagePickerControllerCameraDeviceRear; 

_picker.delegate = self; 
_picker.wantsFullScreenLayout = YES; 

} 

и viewWillApper метод:

-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(closeCameraButton:) name:@"ShowMainView" object:nil]; 
    [self createImagePicker]; 
    [m_cameraOverlayView setBackgroundColor:[UIColor clearColor]]; 
    [self presentModalViewController:_picker animated:NO]; 
    _picker.cameraOverlayView = m_cameraOverlayView; 

    [cameraImgView setHidden:YES]; 
    [filterView setHidden:YES]; 
    m_cameraOverlayView.hidden = NO; 
    cameraSelectedButton.hidden = NO; 
    cancelButton.hidden = YES; 
    selectButton.hidden = YES; 

    for (id Object in [scrollview subviews]) 
    { 
     if([Object isKindOfClass:[UIButton class]]) 
     { 
      [Object removeFromSuperview]; 
     } 
    } 

    [m_toolbarImage setFrame:CGRectMake(0, 427, 320, 55)]; 
    [cameraSelectedButton setFrame:CGRectMake(128, 432, 86, 44)]; 

    [m_cancelButton setFrame:CGRectMake(10, 434, 82, 40)]; 
    [m_cancelButton setTitle:@"Close" forState:UIControlStateNormal]; 
    [m_cancelButton setBackgroundImage:[UIImage imageNamed:@"menu-bar-button.png"] forState:UIControlStateNormal]; 
    [m_cancelButton setTitleColor:[UIColor colorWithRed:110/256.0 green:52/256.0 blue:28/256.0 alpha:1.0] forState:UIControlStateNormal]; 


    [cancelButton setFrame:CGRectMake(120, 434, 35, 35)]; 
    [selectButton setFrame:CGRectMake(184, 434, 35, 35)]; 

    } 
+0

Если вы на самом деле разместить метод в вопросе, а не захват экрана, это может помочь! В частности, ваш метод 'createImagePicker' ... – lxt

+0

@lxt отредактировал мой вопрос –

+0

Я предполагаю, что в какой-то момент вы вызываете' [_picker release] '? – lxt

ответ

2

Вы должны позвонить [_picker release]; отказаться от права собственности _picker памяти, как описано в Управление памятью Документах Apple.

+0

Вопрос в том, что ARC включен. Таким образом, 'release' не может быть вызвана. – Tikkes

+0

@ edo42 да как tikkes сказал, что это в iOS5, поэтому я не могу назвать выпуск –

+0

Он не уточнил, что ARC был включен – edo42

3

Просто увидел, что даже исходный код из яблока связан here утечки с той же проблемой, мы имеем ...

1

Я читал много других сообщений об этой проблеме. Кто-то говорит, что это проблема Apple, и именно поэтому Зиллиан предположил, что пример PhotoPicker также протекает. Обходной путь состоит в том, чтобы создать только один экземпляр UIImagePickerController, возможно, как одноэлементный, и никогда не выпускать его (или позволить ARC выпускать его для вас). Таким образом, вы будете использовать всегда один и тот же экземпляр, и он, вероятно, будет течь меньше времени.

+0

Я пробовал это, но это тоже не сработало. Он все равно будет течь точно так же.Некоторые люди предложили некоторые другие вещи [мой вопрос] (http://stackoverflow.com/questions/10752917/memory-leak-on-presentmodalviewcontroller), но никто из них, похоже, не работал для меня. Я хотел бы это исправить, но до сих пор мне не повезло. – Tikkes

+0

Я не сказал, что утечка исчезнет, ​​попробуйте уменьшить ее. Это не большая проблема с утечкой в ​​вашем приложении. – edo42

4

Это похоже на проблему с UIImagePickerController в iOS 5 независимо от того, используется ли ARC или нет.

У меня есть приложение, разработанное для iOS 4 с использованием xcode 3.2.5, и инструменты не показывают утечек, когда фотография берется или выбирается из библиотеки (протестировано на устройстве под управлением iOS 4.1). Тот же код протестирован на устройстве, протекающем iOS 5.1, как описано.

Я знаю, что это не ответ, но проблема кажется более широкой, чем исходный вопрос.

+0

Происходит утечка памяти в UIImagePickerController при прокрутке для выбора фотографии. Если вы выберете фотографию без прокрутки, утечки не произойдет. Но если вы прокручиваете фотографии (при условии, что у вас достаточно фотографий для прокрутки), утечка возникает, даже если вы не выбираете фотографию, которая исключает проблему, являющуюся моим кодом. –