[OC] 线程 dispatch_group_t】的更多相关文章

- (void)groupEvent{ //创建线程 dispatch_group_t group =dispatch_group_create(); dispatch_queue_t globalQueue=dispatch_get_global_queue(, ); dispatch_group_enter(group); //模拟多线程耗时操作 dispatch_group_async(group, globalQueue, ^{ sleep(); NSLog(@"%@---block1结…
1.队列组两种使用方法2.队列组等待 wait /** 新方法 队列组一般用在在异步操作,在主线程写队列组毫无任何作用 */ - (void)GCD_Group_new_group___notify{ dispatch_queue_t queue = dispatch_queue_create("11", DISPATCH_QUEUE_CONCURRENT); dispatch_queue_t globalqueue = dispatch_get_global_queue(0, 0);…
#import "ViewController.h" #import <pthread.h> //1.需要包含这个头文件 @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //2.创建线程对象 pthread_t p; //3.创建线程 /* 参数1 : pthread_t  _Nullable *restri…
    方法1 :直接创建 alloc init - (void)createNSThread111{ /* 参数1: (nonnull id) 目标对象 self 参数2:(nonnull SEL) 方法选择器 ,调用的方法 参数3:(nullable id) 前面调用方法需要传递的参数 nil * //1.创建线程 NSThread *thread= [[NSThread alloc] initWithTarget:self selector:@selector(run:) object:@…
#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ [self BlockOperation]; } -(void)BlockOperation{ //1.创建任务 NSBlockOperat…
- (void)forDemo{ //全都是在主线程操作的 ; i<; i++) { NSLog(@"--%@", [NSThread currentThread]); } /* 2018-06-27 11:33:44.226664+0800 5线程操作-GCD-快速迭代[7715:77291] --<NSThread: 0x60800006a9c0>{number = 1, name = main} 2018-06-27 11:33:44.226845+0800 5…
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ // [self downImage]; // [self delay]; [self once]; [self once]; [self once]; } /** 一次性代码: 整个应用程序只会执行一次 不可以放在懒加载里面, 如果在类中使用一次性代码, 创建的第二个对象, 就完全不会初始化, static : 全局变量 */ -(void…
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ // GCD 开几条线程并不是我们可以控制的,而是系统来决定的, // [self asyncConcurrent]; // [self asyncSerial]; // [self syncConcurrent]; // [self syncSerial]; // [self test_get_global_queue];// [self…
#import "ViewController.h" @interface ViewController () /** 图片 */ @property (weak, nonatomic) IBOutlet UIImageView *imageView; @end @implementation ViewController - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{…
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //同步函数无需栅栏函数 //栅栏函数不能使用全局并发队列:不起作用 //栅栏函数不能使用全局并发队列:不起作用 //栅栏函数不能使用全局并发队列:不起作用 //栅栏函数不能使用全局并发队列:不起作用 //栅栏函数不能使用全局并发队列:不起作用 //栅栏函数不能使用全局并发队列:不起作用 dispatch_queue_t queue111 =…
1. GCD介绍 1.11.2 1.3 异步具备开启能力但是不是 一定可以开启 1.4 1.5 67. 8.…
    1.pThread 跨平台的多线程技术 , 是IEEE制定的POSIX 表示可移植性操作系统接口的多线程计数,UNIX内核平台 Unix,Linux,Mac(小红帽) (windows上有可移植的版本),C语言的API.   2.NSThread OC 线程技术   3.该方法只是初始化了一个子线程,但是线程并没有开启,必须用[thread start] 开启线程 target 调用对象 SEL 绑定的事件 object 附带的参数   4.设置线程名字 thread.name = @"…
一)GCD 的使用方式 dispatch_async(dispatch_queue_t queue, dispatch_block_t block); async表明运行方式 queue则是你把任务交给那个线程队列来处理 block代表的是你要做的事情 //线程运行方式 dispatch_async 异步执行 dispatch_sync  同步执行 dispatch_delay 延迟执行 ... 二)处理任务对象 dispatch queue(线程队列) 一.dispatch_get_main_…
前言 这篇博客九月就想写了,因为赶项目拖了到现在,抓住17年尾巴写吧~ 正文 上次看了一篇 <从一道网易面试题浅谈OC线程安全> 的博客,主要内容是: 作者去网易面试,面试官出了一道面试题:下面代码会发生什么问题? @property (nonatomic, strong) NSString *target; //.... dispatch_queue_t queue = dispatch_queue_create("parallel", DISPATCH_QUEUE_CO…
需求:两个异步任务都完成后, 回到主线程 /** 1.下载图片1和图片2 2.将图片1和图片2合并成一张图片后显示到imageView上 思考: * 下载图片 : 子线程 * 等2张图片都下载完毕后, 才回到主线程 */ - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { // 创建一个组 dispatch_group_t group = dispatch_group_create(); // 开启一个任务下载图片…
1. 检测网络状态 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //获得网络检测结果 BOOL canConnectNetwork = [self isExistenceNetwork]; NSLog(@"Can connect network? --- %d",canConnectNetwork);…
1.线程的状态NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];[thread start];…
分属不同的线程 //定义需要暴露给js的内容,这里我们只暴露personName和queryPersonName接口 @protocol PersonProtocol <JSExport> @property(nonatomic,copy)NSString *personName; -(NSString *)queryPersonName; @end //Person实现PersonProtocol协议,而自己定义的age和queryPersonAge接口不暴露给js @interface P…
一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过“活动监视器”可以查看Mac系统中所开启的进程 2.什么是线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 比如使用酷狗播放音乐.使用迅雷下载电影,都需要在线程中执行 进程是具有一定独立功能的程序关于某个数据集合…
@implementation MySingleton + (instancetype)sharedInstance { static MySingleton* instance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instance = [[MySingleton alloc]initPrivate]; }); return instance; } -(id)init { @throw [NS…
主线程的作用 (在主线程中才能设置) 显示/刷新UI界面 处理UI事件(比如点击事件.滚动事件.拖拽事件): 主线程的使用注意 别将比较耗时的操作放到主线程中. 耗时操作会卡住主线程.影响体验. [NSThread currentThread]获得当前线程. 打印线程.num属性显示有多少条线程. 将耗时操作放在子线程中(后台线程,非主线程): 多线程好处在哪? 在用户点击按钮那一刻就有反应 能同时处理耗时操作和用UI控件的事件. 多线程技术: 1,pthread    一套通用的多线程API(…
1.同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作, 2.异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行 3.GET请求,将参数直接写在访问路径上.操作简单,不过容易被外界看到,安全性不高,地址最多255字节: 4.POST请求,将参数放到body里面.POST请求操作相对复杂,需要将参数和地址分开,不过安全性高,参数放在body里面,不易被捕获. 查看源码打印?…
在App开发中经常会遇到多个线程同时向服务器取数据, 如果每个线程取得数据后都去刷新UI会造成界面的闪烁 也有可能出现部分数据还没有获取完毕造成程序crash 之前在网上看到很多是利用dispatch_group_async.dispatch_group_t与dispatch_group_notify 组合来实现的 比如这样: 将几个线程加入到group中, 然后利用group_notify来执行最后要做的动作 - (void)viewDidLoad { [super viewDidLoad];…
在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项.当然也会给出几种多线程的案例,在实际使用中感受它们的区别.还有一点需要说明的是,这篇文章将会使用 Swift 和 Objective-c 两种语言讲解,双语幼儿园.OK,let's begin! 概述 这篇文章中,我不会说多线程是什么.线程和进程的区别.多线程有什么用,当然我也不会说什么是串行.什么是并行等问题,这些我们应该都知道的. 在 iOS 中其实目前有 4 套多线程方案,他们分别是: Pthreads…
OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装.继承.多态.它既具有静态语言的特性(如C++),又有动态语言的效率(动态绑定.动态加载等).总体来讲,OC确实是一门不错的编程语言, Objective-C具有相当多的动态特性,表现为三方面:动态类型(Dynamic typing).动态绑定(Dynamic binding)和动态加载(Dynamic loading).动态——必须到运行时(run time)才会做的一些事情. 动态类型:即运行时再决定对象的类型,这…
swift中的使用案例样式 // Mark: -数据源更新 typealias AddDataBlock = () ->Void var updataBlock:AddDataBlock? func loadLiveData(){ let grpup = DispatchGroup() grpup.enter() //        //首页直播接口请求 HomeLiveProvider.request(.liveList) { result in if case let .success(re…
一.前言部分 最近在面试,重新温习了一遍多线程,希望加深一遍对于多线程的理解. 1.什么是进程? 1).要了解线程我们必须先了解进程,通俗来讲进程就是在系统中运行的一个应用程序. 2).每个线程之间是独立存在的,分别运行在其专用的且受保护的内存空间中. 3).比如打开QQ或Xcode系统会分别开启两个进程 如图:…
JS调用原生OC篇 方式一(反正我不用) 第一种方式是用JS发起一个假的URL请求,然后利用UIWebView的代理方法拦截这次请求,然后再做相应的处理. 我写了一个简单的HTML网页和一个btn点击事件用来与原生OC交互,HTML代码如下: <html> <header> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <scrip…
OC: +(instancetype)shareNetworkTools{ static id instance; static dispatch_once_t onceToken; //onceToken默认等于0,如果是0就执行block,如果不是就不执行 NSLog(@"%ld",onceToken); dispatch_once(&onceToken, ^{ instance = [[self alloc] init]; }); return instance; } S…
进程与线程: 1>   一个应用程序对应一个进程,一个进程帮助程序占据一块存储空间 2>   要想在进程中执行任务,就必须开启线程,一条线程就代表一个任务 3>   一个进程中允许开启多条线程,也就是同时执行多个任务 1.iOS的三种多线程技术 1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 2.以下两点是苹果专门开发的“并发”技术,使得程序员可以不再去关心线程的具体使用问题 ØNSOperation/NSOperationQueue 面向对象的线程…