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

4

我有一些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运行应用程序的设备上...也许与调试器有关?

1
如果您担心调试器会减慢速度,那么只需使用一些 NSTimeInterval 实例变量,并稍后将它们记录下来。类似这样:startSecond = [NSDate timeIntervalSinceReferenceDate]; NSLog 已知会导致性能问题。 - NJones
2个回答

3

我知道如果警告没有在主线程上,它们可能会延迟。


除非在文档中明确允许使用任何 UIKit 的次要线程,否则您永远不应该在次要线程上使用它。但是我认为这里没有问题 - 操作表代理方法由框架调用,而框架只会在主线程上进行调用。 - Conrad Shultz

0

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

你的代码看起来非常平淡,所以我怀疑代码片段之外存在一些其他问题。

我看到你引用了计时器……这可能是某些其他东西(比如定时器回调)在主线程上失控的表现吗?尝试使用时间分析器或系统跟踪工具来找出是什么在阻塞(肯定有什么在阻塞)。


所以...你在你的应用程序中使用计时器? - Conrad Shultz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接