UIActionSheet需要很长时间才能做出回应

Xav*_*ero 6 iphone objective-c uiview uiactionsheet ios

我正在创建一个UIActionSheeton actionSheet:clickedButtonAtIndex委托方法.

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

        [self.myFirstView removeFromSuperview]; 

        if (!self.mySecondView) {
            [[NSBundle mainBundle] loadNibNamed:@"MySecondView" owner:self options:nil];
        }
        [self.mySecondView setFrame:CGRectMake(0, 0, 320, 480)];

        [[UIApplication sharedApplication].keyWindow addSubview: self.mySecondView];

        UIActionSheet * action = [[UIActionSheet alloc]initWithTitle:@""
                                                            delegate:self
                                                   cancelButtonTitle: nil
                                              destructiveButtonTitle: deleteContacts
                                                   otherButtonTitles: cancel, nil];
        action.tag = 102;
        [action showInView:self.view];
        [action release];

    }
Run Code Online (Sandbox Code Playgroud)

我用UIActionSheet与上面完全相同的方法处理了click事件.

if(actionSheet.tag == 102){

    if(buttonIndex == 0){
        if([[NSBundle mainBundle] loadNibNamed:@"MyThirdView" owner:self options:nil]) { 
            [self.myThirdView setFrame:CGRectMake(0, 0, 320, 480)];
            [[UIApplication sharedApplication].keyWindow addSubview:self.myThirdView];
        }
        [self.mySecondView removeFromSuperview]; 

        [self.doneButton.target performSelector:self.doneButton.action withObject:self.doneButton.target];

        [self performSelector:@selector(RemoveView) withObject:self afterDelay:3.0];

    }
}
Run Code Online (Sandbox Code Playgroud)

我面临的问题是,UIActionSheet需要花费太多时间来回应.当我点击UIActionSheet按钮时,它在myThirdView加载前处于冻结状态2或3秒.我无法理解,在这种情况下,响应延迟是什么,因为我在UIActionSheet按钮单击事件方法中做的第一件事就是加载myThirdView.其余代码仅在加载myThirdView的代码之后执行.但即便是第一行代码似乎也会在延迟后执行.有什么建议?

And*_*mer 2

问题。UIActionSheet 是否冻结,或者是否消失并且第三个视图在 2-3 秒内不可见?

这可能是由于以下两个问题之一造成的。

  1. 如果整个操作表冻结,那么当您初始化第三个视图时,您正在做一些繁重的工作,您正在加载一些核心数据,或大量资产,或需要很长时间的东西。如果是这种情况,您需要重新格式化加载第三个视图的方式。我建议将任何繁重的加载推到后台(这意味着如果您的 xib 中有很多图像,您可能需要在代码中加载它们)。

  2. 另一种可能性是,您将第三个视图添加到第二个视图下方,然后在 3 秒内不隐藏第二个视图(通过延迟执行选择器来完成)。如果是这种情况,只需消除延迟即可。

我创建了几个类来帮助我计算执行时间并找到代码中的瓶颈,看起来它们现在可能会对您有所帮助。 http://forrst.com/posts/Code_Execution_Timer_for_iOS_Development-dSJ