代码之家  ›  专栏  ›  技术社区  ›  Sourav Mishra

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

  •  1
  • Sourav Mishra  · 技术社区  · 9 年前

    在加载时,当我们单击返回按钮或表格的任何单元格时,加载完成后会多次调用该操作。这里是我在开始加载和停止加载时所做的代码片段。

    +(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];
    }
    

    请帮帮我。

    使现代化

    实际上,我正在从服务器获取数据。每当用户进入下一个窗口时,在viewWillAppear函数中,我调用一个函数,该函数将调用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);
        }
    
    }
    
    1 回复  |  直到 9 年前
        1
  •  2
  •   SwiftArchitect    9 年前

    不要阻塞主线程。

    看到你调用 [AppConstants showLoader_OnView] 从…起 performAutoSync ,以及 showLoader_OnView 依次执行:

    [MBProgressHUD showHUDAddedTo:APP_DELEGATE.window animated:YES]
    

    我只能假设 执行自动同步 在主线程中执行。当然,这会阻塞UI,直到操作完成。


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

    此外,请删除此项,因为它有资格成为一个骗局;

    APP_DELEGATE.window.userInteractionEnabled = NO