【问题标题】:Using NSTimer to call performSelectorOnMainThread使用 NSTimer 调用 performSelectorOnMainThread
【发布时间】:2014-03-20 07:41:19
【问题描述】:

我可以在下面的行中致电pushIncompleteDataToServer

[sharedDataController performSelectorOnMainThread:@selector(pushIncompleteDataToServer) 
                                       withObject:sharedDataController 
                                    waitUntilDone:NO].

现在我想用 NSTimer 以 5.0 秒的间隔调用它

[NSTimer scheduledTimerWithTimeInterval:5.0 
                                 target:sharedDataController 
                               selector:@selector(**pushIncompleteDataToServer**) 
                               userInfo:[ self userInfo] 
                                repeats:YES];

我想打电话给performSelectorOnMainThread,而不是pushIncompleteDataToServer(第一个语句中的内容)。该怎么做?

【问题讨论】:

标签: ios objective-c iphone nstimer performselector


【解决方案1】:

这样做

[NSTimer scheduledTimerWithTimeInterval:5.0 
                                 target:sharedDataController 
                               selector:@selector(pushData) 
                               userInfo:[ self userInfo] 
                                repeats:YES];


-(void)pushData {
    [sharedDataController performSelectorOnMainThread:@selector(pushIncompleteDataToServer) 
                                           withObject:sharedDataController 
                                        waitUntilDone:NO].

}

【讨论】:

  • 丑陋的。更好的是在主运行循环上安排计时器。
  • 选择器可能错误:@selector(pushIncompleteDataToServer) 应该是@selector(pushIncompleteDataToServer:)
  • @CouchDeveloper 我不这么认为;我认为performSelectorOnMainThread 的使用是错误的,因为它会将self 传递给方法。
  • @trojanfoe 我的意思是pushData方法中使用的选择器。显然,方法pushIncompleteDataToServer 有一个参数(由performSelectorOnMainThread:withObject:waitUntilDone: 的参数withObject 中给出的参数sharedDataController 表示)。但这也可能是另一个问题;)
  • @CouchDeveloper 是的,但我的意思是不应该指定参数(应该是nil)。如果该方法没有被调用,那么 OP 就会知道它,所以选择器可能是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 2013-02-22
  • 2013-08-11
相关资源
最近更新 更多