一 GCD初识

1.GCD基础概念
(此笔记为学习Objective-C高级编程书中第三章所记录的相关知识点)

gcd为异步执行任务的技术之一,只要用合适的queue就可以生成线程去执行任务。例如''


 [dispatch_async(queue, ^{

        //异步执行的代码

        [dispatch_async(dispatch_get_main_queue(), ^{

            //回到主线程执行代码

        })];

    })];

当然在导入GCD之前 NSObject类中也提供类似的示例方法 来实现简单的多线程开发 例如


- (void)viewDidLoad {

    [super viewDidLoad];

    [self performSelectorInBackground:@selector(doSometing) withObject:nil];

}

//开启后台执行的方法

-(void)doSometing{

    //处理耗时操作 如下载图片 访问数据库等操作

    //.....

    //处理完成之后同步主线程

    [self performSelectorOnMainThread:@selector(finishWork) withObject:nil waitUntilDone:NO];

}

//主线程处理的方法

-(void)finishWork{

    //回到主线程 处理 如操作UI

}

NSObject提供的多线程方法虽然比GCD看起来简单 但是简便性上却差了很多 ,所以使用GCD来开发多线程还是可以提高执行效率

2.多线程编程
CPU技术有很多 但是基本是一个CPU核能够执行的的CPU命令始终为1 ,但是现在由于硬件都提供了多核,那这样就可以由多个CPU并行执行多个线程,这样的技术为多线程编程。

但是,多线程编程也容易引发各种问题。例如 多个线程竞争相同的资源可能导致数据的不一致、停止等待的线程会导致多个线程持续等待而造成死锁、若使用太多的线程又会消耗大量的内存。但是即便如此使用多线程编程可以保证应用程序的响应性能。

在应用程序启动时,最先执行的线程就是主线程,主要用来绘界面,处理屏幕事件等操作。若将耗时操作放入主线程则会影响RunLoop主循环的执行所以导致界面停滞。故耗时操作应放入其他线程去执行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文用来介绍 iOS 多线程中 GCD 的相关知识以及使用方法。这大概是史上最详细、清晰的关于 GCD 的详细讲...
    花花世界的孤独行者阅读 526评论 0 1
  • 1.NSTimer不准时的原因:(1).RunLoop循环处理时间,每次循环是固定时间,只有在这段时间才会去查看N...
    稻春阅读 1,285评论 0 3
  • 近年来被一件事情深深困扰,我在家庭以外能很好地与同事和朋友相处,和他们的关系都比较融洽,很少发生相互指责、激烈争...
    等待爆发的火山阅读 1,045评论 4 1
  • 我们班向来是风气很好的班,自从上次的抠脚大汉一事过后,原以为会一直风平浪静,谁想,才过了几天,又有事情发生了,头疼...
    青栀离殇阅读 359评论 1 4
  • 昨天中午,有同事请大家吃面条——关中面馆里比较劲道的那种。 公司的女同事们,平日里干活的样子,豪爽不输男子,表现在...
    星韵r阅读 266评论 0 1