多线程,滤镜

GCD线程

1.dispatch_group_notify

2.创建  组队列  dispatch_group_t group = dispatch_group_create()

3.创建  操作queue (全局队列)  

   dispatch_queue_t queue1 = dispatch_get_global_queue

   (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)

4.任务1(异步执行任务)   

   dispatch_group_async(group, queue1, ^{ 图片加载方法 }

5.监听得知所有任务完成

   dispatch_group_notify(group, dispatch_get_main_queue(), ^{  

   添加提示框,休眠时间sleep

   })

6.休眠时间 sleep

GCD多线程

1.创建一个九宫格,初始化数组

2.串行队列

1)创建串行队列

    dispatch_queue_t serialQueue = dispatch_queue_create

    ("myQueue", DISPATCH_QUEUE_PRIORITY_DEFAULT)

2)执行任务  同步sync 异步async

   异步执行队里任务 ,由于是串行队列,所以不会开启新的线程

     dispatch_async(serialQueue, ^{  [self loadImage: i];方法    });

3)定义图片路径 NSData

4)获取主队列

    dispatch_queue_t mainQueue = dispatch_get_main_queue()

5)更新UI(同步)

   dispatch_sync(mainQueue, ^{    主线程,显示加载图片    });

3.全局队列(并发队列)

1)创建全局队列

      dispatch_queue_t globalQueue = dispatch_get_global_queue

     (DISPATCH_QUEUE_SERIAL, 0); 

2)异步执行队列任务

      dispatch_async(globalQueue, ^{   [self loadImage:i];方法  });

3)定义图片路径 NSData

4)获取主队列

    dispatch_queue_t mainQueue = dispatch_get_main_queue()

5)更新UI(同步)

   dispatch_sync(mainQueue, ^{    主线程,显示加载图片    });

GCD图片切换

1.定义数组存放图片路径,创建imageView

2.图片自定义

   _image.contentMode = UIViewContentModeScaleAspectFill

3.创建队列

    dispatch_queue_t serialQueue = dispatch_queue_create

    ("myQueue", DISPATCH_QUEUE_SERIAL);

4.打印线程  [NSThread currentThread]

5.加载图片

多线程资源抢夺

多线程买票

1.定义数组NSMutableArray

   初始化数组,   给数组赋值addObjectsFromArray

   [_tickets addObjectsFromArray:@[@“1.上铺",@"1.中铺",@"1.下铺"]]

2.(开始卖票 )创建并发队列

3.创建10个线程用于抢票for循环

4.数组中的最后一个元素lastObject

   [_tickets lastObject]

5.移除数组中的元素removeLastObject

   [_tickets removeLastObject]

6. 锁   

方法一:

1)创建 锁   NSLock *_lock

2)nonatomic属性读取的事内存数据(寄存器计算好的结果),atomic保证直接读取寄存器的数据(这样就不会出现一个线程在修改数据,另一个线程读取了修改之前的数据)永远保证同时只有一个线程在访问数据,一个属性     @property(atomic,strong)NSMutableArray *tickets

3)使用时,把资源抢夺部分的代码放到loc和unlock之间,  当一个线程A进入加锁代码后,另一个线程B就无法访问,只有线程A执行完加锁的任务后,线程B才能访问加锁代码

    上锁   [_lock lock]

    解锁   [_lock unlock]

方法二:

   @synchronized(self){  资源抢夺内容    }

滤镜

1.显示所有滤镜

   NSArray *array = [CIFilter filterNamesInCategory:kCICategoryBuiltIn];

   NSLog(@"%@", array);

2.定义全局变量

    CIContext *_context; //CI的上下文

    CIImage *_oldImage; //编辑前

    CIImage *_newImage; //编辑后

    CIFilter *_filter; //滤镜

3.初始化CI上下文

    _context = [CIContext contextWithOptions:nil]

4.初始化滤镜

    _filter = [CIFilter filterWithName:@“CIColorControls"]

5.加载图片

6.加载进度条slider

7.初始化CIImage,UI->CG->CI

    _oldImage = [CIImage imageWithCGImage:[image CGImage]];

8.设置滤镜的输入图片

    [_filter setValue:_oldImage forKey:@“inputImage"];

9.饱和度

    [_filter setValue:[NSNumber numberWithFloat:sender.value]  forKey:@“inputContrast"];

    inputSaturation 饱和度 0-2

    inputBrightness 亮度 -1-1

    inputContrast 对比度 0-2

10.获取滤镜图片,CI->CG->UI

    _newImage = [_filter outputImage];

    CGImageRef cgImage = [_context createCGImage:_newImage fromRect:[_oldImage extent]];

    _imageView.image = [UIImage imageWithCGImage:cgImage];

12.释放CGImage对象    

    CGImageRelease(cgImage)

转载于:https://my.oschina.net/u/2892949/blog/743858

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值