如何在不立即执行select器的情况下创build不是主线程的NSThread
我想创build一个不是主线程的工作线程,所以我可以调用…
[self performSelector:@selector(doStuff) OnThread:self.myWorkerThread withObject:nil];
…在我的代码中的一堆地点。 我如何创build一个线程..任何线程,并将其分配给一个variables,所以我可以在我的代码中反复使用它。 NSThread detachNewThreadWithSElector只会创build一个用于运行该select器的目的。 我需要创build一个线程,并以某种方式使用它。
我正在使用iOS,并需要在writerThread上执行所有的CoreData写操作。 我需要每次都使用相同的线程(不是主线程)。
我强烈build议调查大中央调度:)。 你可以很容易地通过dispatch_queue_create创build一个调度队列,或者获得一个现有的并发线程并发送你想要的任何东西。 它将根据工作负载/操作系统状态等创build适当数量的线程。它将如下所示:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^{ //Do stuff });
或者你可以看看它的NS对手,NSOperation。 我不知道只有NSThread才能做到这一点。 似乎设置它的select器的唯一方法是用一个初始化它。
编辑如果你只想要一个线程,只需调用[[NSThread alloc] init]
:p
进一步的编辑: iPhone:如何使用performSelector:onThread:withObject:waitUntilDone:方法?
按照这个答案,设置会很困难,因为每个线程在创build时都需要一个“主”function,否则它什么都不会做。
看起来最简单的方法是使用块:
void (^now)(void) = ^ { NSDate *date = [NSDate date]; NSLog(@"The date and time is %@", date); };
并致电:
now();
NSBlockOperation或dispatch_async()。
在这里看到更多: http : //pragmaticstudio.com/blog/2010/7/28/ios4-blocks-1
如果你真的想要这个,而不是使用GCD,那么:
NSThread *thr = [[NSThread alloc] initWithTarget:anobject selector:@selector(doStuff) object:nil];
而且这将会在你的对象上调用适当的方法 – 但是,在我看来,NSThread的当前实现不允许改变目标和select器。
如果你正在做这个和Core Data交互(就像你的问题所build议的那样),并且你的应用可能需要iOS 5,那么你可能需要研究在iOS 5中添加的新的私有队列pipe理对象上下文。它创build和pipe理线程/调度队列,然后将其发送到队列中作为与之交互的方式。 有关更多详细信息,请参阅发行说明和WWDC会话video 。
更新 (2016年5月):在iOS 5中添加的新API是-[NSManagedObjectContext initWithConcurrencyType:]
。 从iOS 9开始,旧版本的初始化程序已经被弃用,并且已经推出了基于队列的并发types之前的默认的限制并发types。 所以,如果你不使用队列来pipe理上下文访问,我强烈build议朝这个方向前进。
我还强烈build议在开发过程中使用com.apple.CoreData.ConcurrencyDebug
启动参数 ,以帮助您find违反规则的地方。
- 我如何回复GKTurnBasedExchange? GKLocalPlayerListener委托receivedExchangeReplies被间歇调用
- 重新加载表会导致闪烁
- 在WhatsApp URLscheme中的ABID
- 允许编辑UIImagePickerViewController不起作用select2个不同的图像
- 带有混合Swift和Objective-c项目的Xcode 8没有find“ModuleName-Swift.h”头文件
- iOS共享扩展程序无法在图像url上使用
- 如何在swift中制作圆形音频可视化工具?
- 你如何从视图控制器以编程方式绘制一条线?
- 以无编程方式实例化UIViewController