Zapewniam, że szukałem odpowiedzi w SO na moje pytanie, ale żaden z nich nie był pomocny. Tutaj mam prosty kod, który należy przedstawić UIImagePickerController
W ciągu UIPopoverController
:UIPopovercontroller dealloc osiągnięty, podczas gdy popover jest nadal widoczny
-(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];
}
Teraz, nawet po raz pierwszy uzyskać [UIPopoveController dealloc]
gdy nadejdzie ... wywala błąd i program. Nie robię żadnych retain, relase lub autoreleases według ARC. Czy przy korzystaniu z ARC istnieje szczególna uwaga dotycząca UIPopoverControllers
?
Och, rozumiem. Ale czy to nie jest jak UIAlertView? Nigdy nie mam na to Ivara, po prostu przydzielaję go wszędzie tam, gdzie potrzebuję, pokaż go, a następnie [zwalniam]. Czym różni się kontroler popover? –
@Mikayil AlertView jest zachowywany przez jego widok (tak jak wszystkie widoki), ale kontroler popoverController nie jest widokiem, więc nie ma podglądu, więc nikt go nie zatrzyma, jeśli go nie zatrzymasz (lub przechowuj go w silnej zmiennej, której zasięg jest dłuższy niż bieżąca metoda - na przykład iVar). – fzwo
Ale nadal jestem zdezorientowany co do zachowania licznika UIPopoverController. Ponieważ wystawiłem czek, zanim go przydzieliłem i zainicjowałem. I tylko jeśli jest zero, przydzielam nowy. Ale po przydzieleniu go po raz pierwszy nigdy go nie dostaję. Chodzi mi o to, że raz nazywam metodę. Tam przydzielam i inicjuję mój ivar. I następnym razem, gdy ponownie nazywam tę metodę tym razem, znajduję już przydzielony mój ivar. Jeśli ARC zajmie się tym, to kiedy go zwolni. Czy może go autoreasować? –