我有一个多线程应用程序,其中每个线程都必须执行一些工作,但在某个时刻需要串行执行一些代码(例如写入 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/