1

適切なメソッドを呼び出す UIImagePickerController で [写真を使用] を押すと、CPU 使用率が非常に高いことに気付きました。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{

}

メソッドが空であっても!ここでは、上記のメソッドが呼び出されている間の CPU 使用率をログに記録するイメージを示します。

画像

私が記録したトップは169%でした。えっ?

4

1 に答える 1

0

これは、使用している画像のサイズが通常 2 MB を超える非常に大きいためです。そのため、使用する前に画像のサイズを変更します。コードスニペットは次のとおりです。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    if([[info objectForKey:UIImagePickerControllerMediaType] isEqualToString:@"public.image"]) {
    UIImage *originalImage = info[UIImagePickerControllerOriginalImage];

    if (!originalImage)
        return;

    // Optionally set a placeholder image here while resizing happens in background

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        // Set desired maximum height and calculate width
        CGFloat height = 640.0f;  // or whatever you need
        CGFloat width = (height / self.view.frame.size.height) * self.view.frame.size.width;

        // Resize the image
        UIImage * image = [originalImage resizedImage:CGSizeMake(width, height) interpolationQuality:kCGInterpolationDefault];

        //save/use the image here
        UIImageWriteToSavedPhotosAlbum(image, nil, nil, NULL);//for saving to camera roll
    });
}
}
于 2013-11-22T21:08:54.863 に答える