调用alloc init时,UIImagePickerController确实很慢

时间:2013-12-03 14:13:40

标签: ios objective-c performance uiimagepickercontroller

我有一个视图控制器,按下tabBarController中的一个选项卡。在这个视图控制器中,我在viewDidLoad方法中初始化一个UIImagePickerController:

- (void)viewDidLoad
{
    [super viewDidLoad];

    //Set imagePicker
    //-------------------------//
    _imagePicker = [[UIImagePickerController alloc] init];
    _imagePicker.delegate = self;
    _imagePicker.videoMaximumDuration = 10.0f;
}

目的是在稍后按下按钮时显示UIImagePickerController。出于某种原因,虽然为此视图控制器按下选项卡图标时,此viewDidLoad方法正在运行时有3-4秒的挂起。当我注释掉_imagePicker = [[UIImagePickerController alloc] init]这一行时,没有挂起时间,视图控制器会立即加载 - 就像它应该的那样。

有谁知道为什么分配和初始化UIImagePickerController需要这么长时间?如果是这样,除了将其作为后台进程运行之外,有没有办法加快速度?这似乎不是正常行为。

我使用的是iOS7,我没有调用viewWillAppear或viewDidAppear。

3 个答案:

答案 0 :(得分:16)

原来这只是在调试模式下(当iPhone连接并通过Xcode运行时)的一个问题。一旦相同的应用程序在没有连接到Xcode的情况下运行,就不会出现延迟。

答案 1 :(得分:3)

试试这个

//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];
    });
});

** presenter是yourViewController / self

答案 2 :(得分:-1)

试试这个。

    - (void)viewDidLoad{

    //Set imagePicker
    //-------------------------//
    _imagePicker = [[UIImagePickerController alloc] init];
    _imagePicker.delegate = self;
    _imagePicker.videoMaximumDuration = 10.0f;

[super viewDidLoad];