iphone - 使用主线程以外的应用程序生命周期线程

标签 iphone objective-c multithreading nsthread nsoperation

我有一个多线程应用程序,其中每个线程都必须执行一些工作,但在某个时刻需要串行执行一些代码(例如写入 sqlite3 数据库),因此我将该代码称为在主线程上执行使用:

[self performSelectorOnMainThread:@selector(serialJob:) withObject:object waitUntilDone:YES];

一切都很顺利,除了当该代码需要一些时间时,用户与应用程序的交互将被禁用,直到该代码完成为止,所以有没有办法让另一个线程可以在后台运行并且可以每当我需要它时就会像主函数一样被调用,这样我就可以将之前的调用替换为:

[self performSelector:@selector(serialJob:) onThread:REQUIRED_THREAD withObject:object waitUntilDone:YES];

这个线程应该是某个类的静态数据成员,可以从整个代码访问。

任何帮助将不胜感激,非常感谢...

最佳答案

这很容易做到,只需生成线程并让它使用 [[NSRunLoop currentRunLoop] run] 运行它的 runloop 即可。这就是能够将 performSelector:onThread: 与自定义线程一起使用所需的全部内容。

如果您使用的是 iOS 4 或更高版本,您应该考虑使用 Grand Central Dispatch 队列而不是线程。 GCD API 更易于使用,并且可以更好地利用系统资源。

关于iphone - 使用主线程以外的应用程序生命周期线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7049939/

相关文章:

iphone - Objective-C NSInteger 格式困惑

c++ - Windows API 线程池简单示例

java - 在这个例子中使用ConcurrentMap.replace有什么意义

iphone - UITableViewController 不会执行 UIDeviceOrientationPortraitUpsideDown 方向

iphone - NSArray 导致 EXC_BAD_ACCESS

iphone: -[CFString release]: 消息发送到已释放的实例

ios - UICollectionView 自定义流布局在滚动时崩溃

objective-c - 将 AFIncrementalStore 与 WebSockets 应用程序结合使用

ios - 用于在 IOS 中关闭 ViewController 的按钮处理程序语法

java - 如何使主 GUI 线程 'wait' 直到一个单独的弹出窗口消失