ABPersonSetImageData is extreem traag

Ik schrijf een app die een interface heeft met het iPhone-adresboek.

Hier is het relevante gedeelte van mijn code (van UIImagePickerControllerDelegate )

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

Met mijn app kun je een foto maken met de camera (met UIImagePictureController ), en deze vervolgens opslaan als contactpersoon voor iemand in je adresboek.

Ik merk dat de bovenstaande bewerking 5-10 seconden duurt. 1) Is er een betere aanpak? 2) Waarom is dit zo langzaam?

1
Heb je geprobeerd een JPEG-weergave te gebruiken?
toegevoegd de auteur Alexsander Akers, de bron
Ja, het is waarschijnlijk 25% sneller, maar duurt nog steeds meer dan 5 seconden. Ik moet toch denken dat er een snellere manier is om dit te doen ...?
toegevoegd de auteur Matt H., de bron

1 antwoord

Saving as a JPEG:

UIImageJPEGRepresentation (UIImage *image, CGFloat compressionQuality);

zal sneller zijn dan UIImagePNGRepresentation , vooral als compressionQuality is ingesteld op een lage waarde. Dit proces is echter nog steeds een CPU-intensief proces, dus er is geen manier om het wachten te vermijden.

Het beste wat u kunt doen, is een bericht weergeven dat er wordt gewerkt, zodat de interface niet reageert. Gebruik hiervoor bijvoorbeeld SVProgressHUD .

1
toegevoegd
Bedankt! Ik vraag me af hoe het zo snel gaat in de native Contacts-app. Ik vermoed een achtergrondthread?
toegevoegd de auteur Matt H., de bron