【问题标题】:performSelector:onThread: in Swift?performSelector:onThread: 在 Swift 中?
【发布时间】:2014-07-02 22:04:11
【问题描述】:

在当前的 iOS 应用程序中,我正在使用这种执行选择器方法:

[self performSelector:@selector(doSomething)
             onThread:myThread
           withObject:nil
        waitUntilDone:NO
                modes:[NSArray arrayWithObject:NSRunLoopCommonModes]];

我不确定如何让选择器在特定线程上快速运行。有什么建议吗?

【问题讨论】:

  • @rickster:我不想创建线程。我想告诉在特定线程上运行特定函数。
  • @Jack Wu: Swift 替代 performSelectorOnMainThread 并没有告诉我们如何告诉函数在特定线程上运行。它改为使用队列。
  • Stack Overflow 可以继续做任何他们想做的事情。这不是 DUP。我给出了上面的理由。将其标记为重复的人都没有真正理解它。我说的是 performSelector:onThread。那里的“onThread”一词是这些人都不明白的。他们提供的答案都没有告诉我们如何定位不是主线程的特定线程。所以,不幸的是,这个问题仍然存在,希望有人能真正回答它。它不是重复的。仅仅因为有人不理解它并不意味着它是一个重复。

标签: ios swift nsthread performselector


【解决方案1】:

正如我在评论中所建议的,您不应再管理线程。始终使用 dispatch_queue 而不是线程。

如果您真的想这样做,这里有一个解决方法:CFRunLoopPerformBlock

这是 C 代码,但我认为您可以将其转换为 Swift 代码而无需太多工作。

// worker thread
CFRunLoopRef myrunloop; // some shared variable

void worker_thread_main() {
    myrunloop = CFRunLoopGetCurrent();
    CFRunLoopRun(); // or other methods to run the runloop    
}

// other thread to schedule work

CFRunLoopPerformBlock(myrunloop, kCFRunLoopCommonModes, ^{
    dowork();
});

【讨论】:

  • 感谢您的示例。我会试着看看我能不能把它变成swift,然后看看它是否能解决问题。我同意队列,你肯定是正确的。在我所处的情况下,我需要定位一个线程。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
  • 2019-03-06
  • 2018-09-07
相关资源
最近更新 更多