UI进阶之多线程(GCD)

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

#pragma mark -- GCD串行队列--

    //系统提过的一个串行队列
    //使用系统提供串行队列(主线程队列)

   dispatch_queue_t queue = dispatch_get_main_queue();

    //创建一个串行队列
    //第一个参数: 系统提供好的一个宏
    //第二个参数: 系统保留字段 0

   dispatch_queue_t queue = dispatch_queue_create(DISPATCH_QUEUE_SERIAL, 0);

#pragma mark -- 创建一个并行的队列--

    //使用系统提供的并行队列
    //DISPATCH_QUEUE_PRIORITY_BACKGROUND表示队列的优先级
    // 0 保留字段

   dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);

    //创建一个并行队列
    //第一个参数: 表示这个队列的名字
    //第二个参数: 表示系统提供好的一个宏
   // dispatch_queue_t queue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT);

    //使用dispatch_async 向队列中添加任务
    dispatch_async(queue, ^{

        NSLog(@"mian == %@, current == %@", [NSThread mainThread], [NSThread currentThread]);

    });

    dispatch_async(queue, ^{

        NSLog(@"mian1 == %@, current1 == %@", [NSThread mainThread], [NSThread currentThread]);

    });

    dispatch_async(queue, ^{

        NSLog(@"mian2 == %@, current2 == %@", [NSThread mainThread], [NSThread currentThread]);

    });

    dispatch_async(queue, ^{

        NSLog(@"mian3 == %@, current3 == %@", [NSThread mainThread], [NSThread currentThread]);

    });

    dispatch_async(queue, ^{

        NSLog(@"mian4 == %@, current4 == %@", [NSThread mainThread], [NSThread currentThread]);

    });

#pragma mark  -- 表示几秒之后做什么事情--

//    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//        NSLog(@"已经3秒之后了");
//
//    });
//    

#pragma mark -- 重复的向一个队列中添加一系列的任务--
    dispatch_queue_t queue = dispatch_queue_create(0, DISPATCH_QUEUE_SERIAL);

    dispatch_apply(3, queue, ^(size_t index) {

        NSLog(@"index == %zu", index);

    });

#pragma mark -- 分组--

    //创建一个分组
    dispatch_group_t group = dispatch_group_create();
    //创建一个队列
    dispatch_queue_t queue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT);

    //向分组中添加一个任务
    dispatch_group_async(group, queue, ^{
        NSLog(@"我是第1个任务");

    });

    dispatch_group_async(group, queue, ^{
        NSLog(@"我是第2个任务");

    });

    dispatch_group_async(group, queue, ^{
        NSLog(@"我是第3个任务");

    });

    dispatch_group_async(group, queue, ^{
        NSLog(@"我是第4个任务");

    });

    //向分组添加结束任务
    //注意: 不要将结束任务放到第一个位置
    dispatch_group_notify(group, queue, ^{
        NSLog(@" 无论这样,我是最后一个任务");
    });

#pragma  mark -- 并发中的串行 (披着羊皮的狼)--

    dispatch_queue_t queue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queue, ^{
        NSLog(@"我是查询操作1");
    });

    dispatch_async(queue, ^{
        NSLog(@"我是查询操作2");
    });

    dispatch_barrier_async(queue, ^{
        NSLog(@"我是插入操作");
    });

    dispatch_async(queue, ^{
        NSLog(@"我是查询操作3");
    });

    dispatch_async(queue, ^{
        NSLog(@"我是查询操作4");
    });

}

MyObject类.m中

#import "MyObject.h"

static MyObject *object = nil;

@implementation MyObject

+ (MyObject *)shareMyObject
{

    static dispatch_once_t onceToken;

    //表示同一时间内只有一个线程可以访问block块里面的内容

    dispatch_once(&onceToken, ^{

    if (object == nil) {

        object = [[MyObject alloc]init];

    }

    });

    return object;
}
时间: 2024-10-15 12:12:19

UI进阶之多线程(GCD)的相关文章

UI进阶之多线程

#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //[NSThread currentThread] 获取当前的线程 NSLog(@"current == %@", [NSThread currentThread]); //[NSThread ma

UI进阶之多线程(NSOperation)

#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; #pragma mark --NSInvocationOperation方法-- //NSOperation 是一个抽象类 不能直接使用 //通过NSInvocationOperation 类来创建以一个NSOperat

UI进阶 多线程

一.多线程概述 程序.进程.线程 程序:由源代码生成的可执行应用.(例如:QQ.app) 进程:一个正在运行的程序可以看做一个进程.(例如:正在运行的QQ就是一个进程),进程拥有独立运行所需的全部资源. 线程:程序中独立运行的代码段.(例如:接收QQ消息的代码) 一个进程是由一或多个线程组成.进程只负责资源的调度和分配,线程才是程序真正的执行单元,负责代码的执行. 单线程 每个正在运行的程序(即进程),至少包含一个线程,这个线程叫主线程. 主线程在程序启动时被创建,用于执行main函数. 只有一

多线程 GCD

n多线程 GCD n简介 n什么是GCD p全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” p纯C语言,提供了非常多强大的函数 p nGCD的优势 pGCD是苹果公司为多核的并行运算提出的解决方案 pGCD会自动利用更多的CPU内核(比如双核.四核) pGCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程) p程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码 n任务和队列 nGCD中有2个核心概念 p任务:执行什么操作 p队列:用来存放任

【iOS】多线程GCD

GCD(Grand Central Dispatch) : 牛逼的中枢调度器.苹果自带,纯C语言实现,提供了非常多且强大的函数,它可以提高代码的执行效率与多核的利用率. 一.GCD的基本使用 1.GCD中的两个核心概念: ?任务: 执行什么任务. ?队列: 用来存放任务. (用来调度任务) 2.GCD使用的2个步骤: ?1.定制任务. (确定想做的事情) ?2.将任务添加到队列中. ?GCD会自动将队列中的任务取出, 放到对应的线程中执行. ?遵循队列的FIFO原则: 先进先出. 3.同步和异步

深入IOS多线程 GCD(一)

一,什么是GCD GCD是异步执行任务的技术之一,一般将应用程序中记述的线程管理用的代码在系统级中实现.开发者只需要定义想执行的任务并追加到适当的dispatch queue中,GCD就能生成必要的线程并计划执行任务.由于线程管理师作为系统的一部分来实现的,因此可统一管理,也可执行任务,这样就比以前的线程更有效率. 也就是说GCD用我们难以置信的非常简单的记述方法,实现了极为复杂的多线程编程,可以说这是一项划时代的技术.下面是使用了GCD源码的例子,虽然稍微抽象,但从中也能感受到GCD的威力 d

iOS多线程 GCD

iOS多线程 GCD Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法. dispatch queue分成以下三种: 1)运行在主线程的Main queue,通过dispatch_get_main_queue获取. /*! * @function dispatch_get_main_queue * * @abstract * Returns the default queue that is bound to the main thread. *

UI进阶 即时通讯之XMPP好友列表、添加好友、获取会话内容、简单聊天

这篇博客的代码是直接在上篇博客的基础上增加的,先给出部分代码,最后会给出能实现简单功能的完整代码. UI进阶 即时通讯之XMPP登录.注册 1.好友列表 初始化好友花名册 1 #pragma mark - 管理好友 2 // 获取管理好友的单例对象 3 XMPPRosterCoreDataStorage *rosterStorage = [XMPPRosterCoreDataStorage sharedInstance]; 4 // 用管理好友的单例对象初始化Roster花名册 5 // 好友操

IOS -多线程 - GCD - 初识

1. 什么是GCD a. 全称是Grand Center Dispatch b. 纯C语言,提供了非常多强大的函数 2. GCD的优势 a. GCD是苹果公司为多核的并行运算提出的解决方案 b. GCD会自动利用更多的CPU内核(比如双核.四核) c. GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程) d. 程序员只要告诉GCD想要执行什么任务,不需要编写任何线程管理的代码 3. GCD两个核心概念--任务和队列 任务:要执行的操作(方法) 使用block封装,block 就是一个