Objective C中有线程吗?如果有,它们如何声明和使用?
如果有人了解Objective C中的多线程,请与我分享。
谢谢和问候。
Objective C中有线程吗?如果有,它们如何声明和使用?
如果有人了解Objective C中的多线程,请与我分享。
谢谢和问候。
想要在新线程中简单地调用一个方法,可以使用 NSThread
上的 + (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument
方法。如果你不是在运行垃圾回收程序,则需要设置自己的自动释放池。
如果你只是不想阻塞主线程,那么另一种简单的方法是使用 NSObject
上的 - (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg
方法。
根据你需要的并发类型,还应该查看 NSOperation
,它可以免费提供锁定以便你可以在多个线程之间共享等等功能。
NSThread
类进行多线程开发。搜索NSThread
将会帮助你找到相关的API。NSThread *mythread = [[NSThread alloc] initWithTarget:target selector:selector object:argument];
其中target和selector是您想要启动线程的对象和选择器,而argument是要发送到选择器的参数。
然后使用[mythread start]来启动它。
是的,在Objective C中存在线程概念。而且有多种方法可以实现Objective C中的多线程。
1> NSThread
[NSThread detachNewThreadSelector:@selector(startTheBackgroundJob) toTarget:self withObject:nil];
这将在你的主线程中创建一个新的后台线程。
2> 使用 performSelector
[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
如果您从后台线程调用此方法,将在主线程上执行UI任务... 您还可以使用
[self performSelectorInBackground:@selector(abc:) withObject:obj];
这将创建一个后台线程。
3> 使用NSOperation
4> 使用GCD
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self callWebService];
dispatch_async(dispatch_get_main_queue(), ^{
[self updateUI];
});
});
将在后台线程中调用 callWebService
方法,并在完成后在主线程中更新UI。了解更多关于GCD的内容
这几乎是iOS中使用的所有多线程方式。希望这可以帮到你。