Ti assicuro che ho cercato una risposta in SO per la mia domanda ma nessuno di loro è stato utile. Qui ho avuto un semplice codice che dovrebbe presentare una UIImagePickerController
all'interno di un UIPopoverController
:Dealloc UIPopovontroller raggiunto mentre il popover è ancora visibile
-(void)takePicture:(id)sender{
UIImagePickerController *picker=[[UIImagePickerController alloc] init];
picker.delegate=self;
picker.sourceType=UIImagePickerControllerSourceTypeCamera;
picker.allowsEditing=YES;
UIPopoverController *poc=[[UIPopoverController alloc]
initWithContentViewController:picker];
[poc presentPopoverFromBarButtonItem:bbItem
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:NO];
}
Ora, anche dalla prima volta che ho [UIPopoveController dealloc]
raggiunto quando ... errore ed il programma va in crash. Non sto mantenendo alcun fermo, relase o autorelease come da ARC. C'è qualche considerazione speciale con UIPopoverControllers
quando si beneficia di ARC?
Oh, capisco. Ma non è come un UIAlertView? Non ho mai avuto un ivar per questo, lo alloco init ovunque io abbia bisogno, lo mostro e poi [ho usato per] rilasciare. In che cosa è popovercontroller diverso? –
@Mikayil L'alertView viene mantenuto dalla sua superview (come tutte le viste), ma il popoverController non è una vista, quindi non ha una superview, quindi non verrà conservato da nessuno se non lo si mantiene (o memorizzarlo in una variabile forte con un ambito più lungo del metodo corrente, ad esempio un iVar). – fzwo
Ma sono ancora confuso riguardo al numero di conservazioni di UIPopoverController. Perché ho messo un assegno prima di allocarlo e iniziarne uno. E solo se è zero ne assegno uno nuovo. Ma dopo averlo assegnato per la prima volta non lo capisco mai. Voglio dire, chiamo un metodo una volta. Lì alloco e inizio il mio ivar. E la prossima volta che chiamerò di nuovo quel metodo questa volta trovo il mio ivar già allocato. Se ARC si occupa di questo, allora quando lo rilascia. O lo autorizza? –