iOS, ARC: фоновый поток зависает пользовательский интерфейс - PullRequest
2 голосов
/ 07 ноября 2011

У меня есть UIViewController с UITableView в качестве подпредставления. При нажатии определенной ячейки должен быть представлен UIImagePickerController . Из-за длительного времени инициализации я выполняю этот процесс в фоновом режиме, когда действительно появляется UIViewController .
Теперь я добавил ARC в свой проект, и тогда он все еще не работал. Пользовательский интерфейс был заблокирован начальным процессом.

Вот мой код.

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    [self performSelectorInBackground:@selector(initImagePickerControllerInBackground) withObject:nil];
}

...

- (void)initImagePickerController
{
    if (imagePickerController != nil)
        return;

    imagePickerController = [[UIImagePickerController alloc] init];
    imagePickerController.allowsEditing = YES;
    imagePickerController.delegate = self;
    imagePickerController.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeImage];
}

- (void)initImagePickerControllerInBackground
{
    @autoreleasepool
    {
        [self initImagePickerController];
    }
}

Что я должен изменить, чтобы это работало на меня?

1 Ответ

5 голосов
/ 07 ноября 2011

UIKit не является потокобезопасным классом и не должен вызываться извне основного потока. Вы не должны выполнять это выделение / взаимодействие UIImagePickerController в фоновом режиме.

...