iOS线程请求数据,主线程刷新UI,GCD,NSThread,NSOperationQueue比较

线程:大家最熟悉的就是这个GCD的线程了.
dispatch_async(dispatch_get_global_queue(0,0),^{
NSString *bundlePath=[[NSBundle mainBundle]bundlePath];
NSString *path=[bundlePath stringByAppendingPathComponent:htmlName];
NSURL *url=[NSURL fileURLWithPath:path];
NSURLRequest *request=[NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];
dispatch_async(dispatch_get_main_queue(),^{
刷新UI,添加加载UI
});
});
一:线程是运行时执行的一组指令序列
每一个进行至少包含一个线程,可以多个.进程启动时的主要线程通常被称为主线程,所有的UI元素都需要在主线程创建鹤管理。 比如:———IBAction方法的代码都会在主线程中执行。
Cocoa不用许其他线程更新UI,如论何时应用后台执行耗时操作的如网络和其他处理,代码必须将上下文切换到主线程再更新UI。
2:线程是有开销的,创建时间,消耗内核的内存。所以不是一个项目多线程就好,最好不要超过64个线程,GCD的线程池上限了,都知道第三方为了方便都是GCD,所以自己的应用最好多注意了。
那样的话怎么办那:
NSThread和NSOperationQueue对线程的创建过程加以控制,
下面比较下GCD,NSThread,NSOperationQueue。

1:GCD
1:抽象程度高
2:两种队列开箱即可以使用:main和global
3:可以创建更多的队列(dispatch_queue_create)
4:可以请求独占访问(dispatch_barrier_sync和dispatch_baspatch_barrier_async)
5:基于线程管理
6:硬性限制创建64个线程。

2:NSThread
1:低级别构造,最大化控制
2:应用创建并管理线程和线程池
3:应用启动线程
4:线程具有优先权

3: NSOperationQueue
1:无默认队列
2:管理自己创建的队列
3:队列优先级队列
4:操作可以有不同的优先级
5:可以取消线程操作,cancel取消
6:可以等待执行完成后再执行别的。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • iOS多线程编程 基本知识 1. 进程(process) 进程是指在系统中正在运行的一个应用程序,就是一段程序的执...
    陵无山阅读 11,362评论 1 14
  • 前言: 最近想回顾一下多线程问题,看到一篇文章写的非常详细,为了便于以后查找以及加深印象,就照着原文摘录了下文,原...
    FM_0138阅读 4,599评论 1 1
  • 欢迎大家指出文章中需要改正或者需要补充的地方,我会及时更新,非常感谢。 一. 多线程基础 1. 进程 进程是指在系...
    xx_cc阅读 12,019评论 11 70
  • 我的小妞马上就有21个月大了,我和她已经在一起30个月了。这30个月里,我们一起经历了许多。无论是最初早孕时期的流...
    李九_Lijiu阅读 2,540评论 0 1
  • 今日体验:晚上把路虎的手刹电机装上后试了一下没好于是拆了重新装上调整好和个部位试车好使没坐过的一定要多问别人多试几...
    其实_1d17阅读 1,238评论 0 0

友情链接更多精彩内容