2012-05-23 1 views
5

Sto usando UIImagePickerController nella mia applicazione che si sviluppa su iOS5 & XCode4.2, ricevendo perdite di memoria e non ho idea del motivo per cui sto ottenendo questa fuga, per favore, mi dia la risposta per questo.Perdita di memoria UIImagePickerController su iOS5

here i am attaching my screen shot:

e il mio codice:

-(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; 

} 

e il metodo 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

Se effettivamente pubblichi il metodo in questione, piuttosto che uno schermo di afferrare, potrebbe aiutare! In particolare il metodo 'createImagePicker' ... – lxt

+0

@lxt ha modificato la mia domanda –

+0

Suppongo che a un certo punto tu chiami' [_picker release] '? – lxt

risposta

2

Si dovrebbe chiamare [_picker release]; a cedere la proprietà della memoria _picker come descritto nella gestione della memoria Documenti di Apple.

+0

La domanda è con ARC attivato. Quindi 'release' non può essere chiamato. – Tikkes

+0

@ edo42 si come tikkes ha detto che questo è in iOS5, quindi non posso chiamare il rilascio –

+0

Non ha specificato che ARC era ON – edo42

3

appena visto che anche il codice sorgente da parte di Apple legato here perdite con lo stesso problema che abbiamo ...

1

ho letto molti altri post su tale questione. Qualcuno dice che si tratta di un problema Apple, ed è per questo che Zillian ha suggerito che anche l'esempio di PhotoPicker trapelasse. La soluzione alternativa consiste nel creare solo un'istanza di UIImagePickerController, probabilmente come un singleton, e non rilasciarlo mai (o lasciare che ARC lo rilasci per te). In questo modo utilizzerai sempre la stessa istanza e probabilmente cola meno volte.

+0

Ho provato questo ma anche quello non ha funzionato. Perderà ancora nello stesso identico modo.Alcune persone hanno suggerito alcune altre cose su [la mia domanda] (http://stackoverflow.com/questions/10752917/memory-leak-on-presentmodalviewcontroller) ma nessuna sembrava funzionare per me. Mi piacerebbe aggiustarlo ma finora non ho avuto fortuna a farlo. – Tikkes

+0

Non ho detto che la perdita sparirà, proveremo solo a ridurla. Non è un grosso problema avere una perdita nella tua app. – edo42

4

Questo sembra essere un problema con UIImagePickerController in iOS 5 se si utilizza ARC o meno.

Ho un'app sviluppata per iOS 4 che utilizza xcode 3.2.5 e Instruments non mostra perdite quando una foto viene scattata o selezionata dalla libreria (testata su un dispositivo con iOS 4.1). Lo stesso codice testato su un dispositivo con perdite di iOS 5.1 come descritto.

So che questa non è una risposta, ma il problema sembra più ampio della domanda originale.

+0

La perdita di memoria in UIImagePickerController sembra verificarsi mentre si scorre per selezionare una foto. Se si seleziona una foto senza scorrere, la perdita non si verifica. Ma se si scorrono le foto (supponendo di avere abbastanza foto da scorrere), la perdita si verifica anche se non si seleziona una foto, il che esclude il problema essendo il mio codice. –