2013-08-28 24 views
2

我正在开发一个iPhone应用程序,我试图在某些延迟后调用特定的方法。但该方法没有被调用。我不知道为什么它没有被调用。self performSelector:withObject:afterDelay:不调用方法

这里是我的代码

-(void)gettingCommentsList { // some stuff.... 

    [self performSelector:@selector(callGetListInBackgroundMethod) withObject:nil afterDelay:1.0]; } 

-(void)callGetListInBackgroundMethod { 
    isFromthread =YES; 


    NSLog(@"callGetListInBackground"); 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     // Add code here to do background processing 
     // 
     // 

     [self gettingCommentsList]; 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      // Add code here to update the UI/send notifications based on the 
      // results of the background processing 

      [self.commentsTbl reloadData]; 
     }); 
    }); 



} 

感谢

+0

按住Alt键并将鼠标悬停在方法上以检查方法是否被识别。否则调用像'[self performSelector:@selector(callGetListInBackgroundMethod :) withObject:nil afterDelay:0.4];' – user1673099

+0

你确定'performSelector:withObject:afterDelay:'实际上被调用? – sergio

+0

是的,我确定它叫做 – user2185354

回答

0

确保你不叫[NSObject的cancelPreviousPerformRequestsWithTarget:自我]

+0

是的我不打电话 – user2185354

2

一个潜在的问题是,计时器不会阻止线程前退出定时器被解雇。因此,如果运行循环(调用-performSelector:withObject:afterDelay:的线程)没有其他源(工作),它可能不会继续运行一秒或更长时间,并且线程将在计时器触发(并执行您的自定义工作)之前退出。

这当然有可能如果您在辅助线程上安排定时器。

我怀疑这个设计的原因是因为定时器可能被配置为循环(或不) - 很多人最终会遇到'僵尸'线程,因为这些循环定时器永远不会失效。这个问题很容易咀嚼大量的系统资源。

0

你似乎在呼吁从其他每个方法 -

在gettingCommentList,你叫

[self performSelector:@selector(callGetListInBackgroundMethod) withObject:nil afterDelay:1.0]; 

和callGetListInBackgroundMethod在dispatch_async你叫

[self gettingCommentList]; 

编辑:

尝试拨打电话一次,看看它是否有效。如果确实如此,那么可能是在第二次开始之前没有完成第一个呼叫,因此就是问题所在。让我知道发生什么事。

编辑2:

我试过你的代码。问题是随后对gettingCommentList的调用是在后台线程而不是主线程中。所以我这样做:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    // Add code here to do background processing 
    //   
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self gettingCommentsList]; 
    }); 
}); 

它的工作原理。但请确保您不会连续调用这两个函数,因为这会让它们始终运行,我确信您并不真正想要:-)

+0

我正在做的是使用soap 。然后解析响应。解析后再次尝试调用soap,但在单独的线程中,以便我的应用程序不挂起。但我想在特定时间间隔后致电肥皂 – user2185354

+0

我已更新我的帖子。 –

+0

但我想在后台调用getsCommentsList方法。如果我在主线程中调用,那么我的应用程序将挂起 – user2185354

相关问题