Ios 为什么加载完成后要多次执行操作,为什么要将所有事件排队?

Ios 为什么加载完成后要多次执行操作,为什么要将所有事件排队?,ios,iphone,uitableview,cocoa-touch,touch,Ios,Iphone,Uitableview,Cocoa Touch,Touch,当我们点击后退按钮或表格中的任何单元格进行加载时,在加载完成后会多次调用该操作。下面是我开始加载和停止加载时正在执行的代码片段 +(void)showLoader_OnView{ APP_DELEGATE.window.userInteractionEnabled = NO; [MBProgressHUD showHUDAddedTo:APP_DELEGATE.window animated:YES]; } 要停止加载,请执行以下操作:- +(void)hideLoade

当我们点击后退按钮或表格中的任何单元格进行加载时,在加载完成后会多次调用该操作。下面是我开始加载和停止加载时正在执行的代码片段

+(void)showLoader_OnView{
      APP_DELEGATE.window.userInteractionEnabled = NO;
     [MBProgressHUD showHUDAddedTo:APP_DELEGATE.window animated:YES];
}
要停止加载,请执行以下操作:-

+(void)hideLoader {
    APP_DELEGATE.window.userInteractionEnabled =YES;
    [MBProgressHUD hideAllHUDsForView:APP_DELEGATE.window animated:YES];
}
请帮帮我

更新

实际上,我正在从服务器获取数据。每当用户转到下一个窗口,然后在ViewWillExearch函数中,我调用一个函数,该函数将点击api以获取数据

-(void)performAutoSync
{
    @try
    {
        if(self.shouldPerformAutoSync)//Necessary conditions to check the auto sync
        {
            [AppConstants showLoader_OnView];  //here i call the loader.
            self.shouldPerformAutoSync  = NO;
            if(!self.isSyncing)
            {
                if(!syncBl)
                {
                    syncBl = [[SyncBL alloc] init];
                    syncBl.delegate = self;
                }

                if(!syncDl)
                    syncDl = [[SyncDL alloc] init];

                //            [self saveModifiedDataForCurrentViewController];


                [self delayToAutoSync];


                NSMutableDictionary *dictMainData = [NSMutableDictionary new];
                [dictMainData setObject:[syncDl fetchCompleteDataAndPrepareDictionary:YES] forKey:@"data"];//@"MainData"];
                [syncBl performAutoSync:dictMainData];
            }
        }
    }
    @catch (NSException *exception) {
        BILog(@"%@",exception);
    }

}

不要阻塞主线程。

看到您从
performAutoSync
调用
[AppConstants showLoader\u OnView]
,然后
showLoader\u OnView
依次执行:

[MBProgressHUD showHUDAddedTo:APP_DELEGATE.window animated:YES]
我只能假设
performAutoSync
是在主线程中执行的。当然,这会阻止UI,直到您的操作完成


您应该重新设计,这样就不需要所有的状态变量、全局变量、全局调用,并利用多线程

此外,删除这个,因为它是一个乱七八糟的资格

APP_DELEGATE.window.userInteractionEnabled = NO

您不需要添加APP_DELEGATE.window.userInteractionEnabled=NO;通过[MBProgressHUD showHUDAddeto:APP_DELEGATE.window animated:YES]自动禁用ui;请提供您的服务呼叫代码您提供的代码不能说明您面临的任何问题。如果您想让人们了解您的问题并帮助您解决问题,您应该提供更多详细信息。我已经更新了我的问题,请检查。您是否使用了
performSelectorInBackground
?不,实际上我使用了
GCD
来运行
[syncBl performAutoSync:dictMainData]后台线程中的函数。这是我用来从服务器获取数据的函数(即异步操作)。我在iPhone开发方面的经验较少,因此我不了解
性能选择背景。我怎么能用这个来做呢。