为什么实例化UIAlertView需要这么长时间?

时间:2012-01-26 01:40:56

标签: objective-c ios optimization uialertview uiactionsheet

我在这里有一些我正在开发的iOS应用程序的代码,出于某些原因,似乎是一个快速而简单的任务,每次都需要我的iPhone 4S完成一秒钟或更长时间。

上下文就是这个...我有一个2按钮ActionSheet弹出窗口,如果用户点击其中一个按钮,应用程序似乎停止了大约一秒钟。这是代码:

    -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex 
{
    if (buttonIndex == 0) 
    {

        UIAlertView* newTimerAlertView = [[[UIAlertView alloc] initWithTitle:@"Create New Timer" 
                                                                    message:@"Enter a name for your new indicator" 
                                                                   delegate:self 
                                                          cancelButtonTitle:@"Cancel" 
                                                          otherButtonTitles:@"Create", nil] autorelease];
        newTimerAlertView.tag = kNewTimer;
        newTimerAlertView.alertViewStyle = UIAlertViewStylePlainTextInput;
        [newTimerAlertView show];
    }
    else if (buttonIndex == 1)
    {
        NSLog(@"ActionSheet button 2 tapped");
        UIAlertView* newTallyAlertView = [[[UIAlertView alloc] initWithTitle:@"Create New Tally" 
                                                                        message:@"Enter a name for your new indicator" 
                                                                    delegate:self 
                                                          cancelButtonTitle:@"Cancel" 
                                                          otherButtonTitles:@"Create", nil] autorelease];
        newTallyAlertView.tag = kNewTally;
        newTallyAlertView.alertViewStyle = UIAlertViewStylePlainTextInput;
        [newTallyAlertView show];
        NSLog(@"end");
    }
}

为了简单起见,专注于第二个按钮(尽管第一个按钮的行为方式相同),日志看起来像这样:

2012-01-25 20:35:46.330 ...[177:707] ActionSheet button 2 tapped
2012-01-25 20:35:47.194 ...[177:707] end
2012-01-25 20:35:56.154 ...[177:707] ActionSheet button 2 tapped
2012-01-25 20:35:56.180 ...[177:707] end

请注意,我第一次尝试它,在代码片段完成执行之前超过一秒钟,但第二次(以及所有后续时间)代码只需要30毫秒左右。

代码有问题吗?或者我是否需要通过进度视图来弥补延迟?

谢谢!

编辑:这只发生在从Xcode运行应用程序的设备上...也许这与调试器有关?

2 个答案:

答案 0 :(得分:3)

我现在,如果警报不在主线程上,则可能会延迟

答案 1 :(得分:0)

在我遇到的任何情况下,Xcode都不会减慢警报视图。

你的代码看起来非常普通,所以我怀疑你发布的代码片段外面有什么东西。

我看到你引用计时器......这是否可能这是其他东西的表现形式,比如计时器回调,在主线程上疯狂?尝试使用Time Profiler或系统跟踪工具来找出阻塞的东西(肯定是什么)。