我正在开发一个iPhone应用程序,我试图在一定延迟后调用特定方法。但是方法没有被调用。我不知道为什么它没有被调用。
这是我的代码
-(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 :(得分:2)
一个潜在的问题是定时器在定时器被触发之前不会阻止线程退出。因此,如果运行循环(调用-performSelector:withObject:afterDelay:
的线程)没有其他源(工作),它可能不会继续运行一秒钟或更长时间,并且线程将在计时器触发之前退出(并且您的自定义工作是执行)。
如果你在辅助线程上安排计时器,那肯定是可能的。
我怀疑这种设计的原因是因为定时器可能被配置为经常性(或不经常) - 很多人最终会遇到“僵尸”线程,因为那些经常性的定时器永远不会失效。这个问题很容易扼杀大量的系统资源。
答案 1 :(得分:0)
确保你没有调用[NSObject cancelPreviousPerformRequestsWithTarget:self]
答案 2 :(得分:0)
你似乎是从另一个方法调用每个方法 -
在gettingCommentList中,您可以调用
[self performSelector:@selector(callGetListInBackgroundMethod) withObject:nil afterDelay:1.0];
并在dispatch_async的callGetListInBackgroundMethod中调用
[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];
});
});
它有效。但是请确保你不要连续调用这两个函数,因为这会使它们一直运行,我相信你并不是真的想要: - )