线程:大家最熟悉的就是这个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:可以等待执行完成后再执行别的。
网友评论