ABPersonSetImageData работает очень медленно

Я пишу приложение, которое взаимодействует с адресной книгой iPhone.

Вот соответствующий раздел моего кода (от UIImagePickerControllerDelegate)

-(void)imagePickerController:(UIImagePickerController *)picker 
       didFinishPickingImage:(UIImage *)image 
                 editingInfo:(NSDictionary *)editingInfo
{
    ABPersonSetImageData(record, (__bridge CFDataRef)UIImagePNGRepresentation(image), &error);
}

Мое приложение позволяет вам сделать снимок с помощью камеры (используя UIImagePictureController), а затем сохранить его как контакт для кого-то в вашей адресной книге.

Я обнаружил, что описанная выше операция зависает на 5-10 секунд. 1) Есть ли лучший подход? 2) Почему так медленно?


person Matt H.    schedule 24.06.2012    source источник
comment
Вы пытались использовать представление JPEG?   -  person Alexsander Akers    schedule 24.06.2012
comment
Да, это, вероятно, на 25% быстрее, но все равно занимает более 5 секунд. Я должен думать, что есть более быстрый способ сделать это...?   -  person Matt H.    schedule 24.06.2012


Ответы (1)


Сохранение в формате JPEG:

UIImageJPEGRepresentation (UIImage *image, CGFloat compressionQuality);

будет быстрее, чем UIImagePNGRepresentation, особенно если compressionQuality установлено низкое значение. Тем не менее, это по-прежнему ресурсоемкий процесс, поэтому избежать ожидания невозможно.

Лучшее, что вы можете сделать, это показать сообщение о том, что работа выполняется, чтобы интерфейс не чувствовал себя невосприимчивым. Для этого используйте что-то вроде SVProgressHUD.

person mopsled    schedule 24.06.2012
comment
Спасибо! Это заставляет меня задуматься, как это делается так быстро в родном приложении «Контакты». Я предполагаю, фоновый поток? - person Matt H.; 26.06.2012