Acontece que isso é apenas um problema quando no modo de depuração (quando o iPhone está conectado e executando o Xcode). Uma vez que o mesmo aplicativo esteja em execução sem estar conectado ao Xcode, o atraso não ocorre.
UiImagePickerController muito lento ao chamar Alloc init
-
25-08-2022 - |
Pergunta
Eu tenho um controlador de exibição apresentado ao pressionar uma das guias em um tabarcontroller. Neste controlador de exibição, inicializo um uiimagePickerController no método ViewDidload:
- (void)viewDidLoad
{
[super viewDidLoad];
//Set imagePicker
//-------------------------//
_imagePicker = [[UIImagePickerController alloc] init];
_imagePicker.delegate = self;
_imagePicker.videoMaximumDuration = 10.0f;
}
A intenção é exibir o UiImagePickerController em um momento posterior, quando um botão é pressionado. Por alguma razão, porém, quando o ícone da guia é pressionado para esse controlador de exibição, há um suspensão de 3-4 segundos enquanto esse método ViewDidload está em execução. Quando eu comento a linha _ImagePicker = [[UiImagePickerController aloc] init] Não há tempo de suspensão e o controlador de exibição carrega imediatamente - como deveria.
Alguém sabe por que alocar e inicializar o UiImagePickerController está demorando tanto? Em caso afirmativo, existe uma maneira de acelerar além de executá -lo como um processo em segundo plano? Parece que esse não é um comportamento normal.
Estou usando o iOS7 e não estou chamando o ViewWillappear ou o ViewDidAppear.
Solução
Outras dicas
Experimente este iOS 12
//show a HUD or activityIndicator
dispatch_async(dispatch_queue_create("openPhotosCamera", NULL), ^{
UIImagePickerController *mediaUI = [[UIImagePickerController alloc] init];
dispatch_async(dispatch_get_main_queue(), ^{
//hide HUD or activityIndicator
[presenter presentViewController:mediaUI animated:YES completion:nil];
});
});
** Apresentador é o seuViewController / self
Tente isso.
- (void)viewDidLoad{
//Set imagePicker
//-------------------------//
_imagePicker = [[UIImagePickerController alloc] init];
_imagePicker.delegate = self;
_imagePicker.videoMaximumDuration = 10.0f;
[super viewDidLoad];