Blocks的申明调用与Queue当做锁的用法
Blocks的申明与调用
话说Blocks在方法内使用还是挺方便的,之前都是把相同的代码封装成外部函数,然后在一个方法里需要的时候调用,这样挺麻烦的。使用Blocks之后,我们可以把相同代码在这个方法里封装起来,然后再在这个方法中需要的地方直接调用,逻辑清晰,操作也不会那么繁琐。
上代码:
//在方法体内
//block申明与初始化
void(^removePicViewBlock)(int,int) = ^(int start,int stop){
while (start <= stop)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
SWDPictureView *view = (SWDPictureView *)[self.scroller viewWithTag:start + 1];
view.imageView.image = nil;
view.imageView = nil;
view.delegate2 = nil;
[view removeFromSuperview];
start ++;
[pool drain];
}
};
if (page < self.currentPage)
{
//block的调用
removePicViewBlock(0,page);
}
else if(page > self.currentPage)
{
//block的调用
removePicViewBlock(page,[self.picList count]-1);
}
Queue作为锁的用法
说到多线程就必须要提到锁了,话说用锁也蛮麻烦,需要在初始化的时候申明一个锁,然后每个方法的开头加一把锁,结尾再把锁去掉。如果用queue就不必那么麻烦了。根据task在queue中FIFO的特性就可以防止多线程中资源被同时访问。
上代码。
//初始化时初始化一个queue
UserQueue = dispatch_queue_create("use for storing image to disk", nil);
//多线程调用时,将任务放在queue中执行。此时queue充当锁的角色。
//存储图片缓冲到硬盘
-(void)storeImage:(UIImage *)image key:(NSString *)key
{
dispatch_async(UserQueue, ^{
NSFileManager *fileManager = [[NSFileManager alloc] init];
BOOL succ = [fileManager createFileAtPath:[self cachePathForKey:key] contents:UIImageJPEGRepresentation(image, (CGFloat)0.6) attributes:nil];
NSLog(@"store successfully!!! %d",succ);
[fileManager release];
fileManager = nil;
});
}
转载于:https://www.cnblogs.com/leeAsia/archive/2013/03/25/2980862.html
Blocks的申明调用与Queue当做锁的用法相关推荐
- MySQL锁的用法之行级锁
转:http://www.kubiji.cn/topic-id2510.html 行级锁是mysql中粒度最小的一种锁,他能大大减少数据库操作的冲突.但是粒度越小,实现的成本也越高.myisam引擎只 ...
- C++中有关queue常用函数的用法及其注意要项
11:C++中有关queue常用函数的用法及其注意要项 #include<bits/stdc++.h> using namespace std; int main(){queue < ...
- mysql 锁怎么使用_MySQL锁的用法之行级锁
行级锁是MySQL中粒度最小的一种锁,他能大大减少数据库操作的冲突.但是粒度越小,实现的成本也越高.MYISAM引擎只支持表级锁,而INNODB引擎能够支持行级锁,下面的内容也是针对INNODB行级锁 ...
- RabbitMQ高可用--Quorum Queue(仲裁队列)的用法
原文网址:RabbitMQ高可用--Quorum Queue(仲裁队列)的用法_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍RabbitMQ的Quorum Queue(仲裁队列)的用法. 官 ...
- js实现一个既可以当做对象调用也可以当做函数调用的方法
定义一个方法,让他既可以当做函数直接调用,也可以当做对象调用. // 创建一个函数 function MainFn(params){this.MainFnObj = {name: 'mainFnNam ...
- go 调用etcd实现分布式锁
package workerimport ("context""fmt""go.etcd.io/etcd/clientv3""ti ...
- android 调用锁屏,Android反射调用goToSleep实现一键锁屏、亮屏
/** * 关闭屏幕 ,其实是使系统休眠 * */ public static void goToSleep(Context context) { PowerManager powerManager= ...
- Android反射调用goToSleep实现一键锁屏、亮屏
/** * 关闭屏幕 ,其实是使系统休眠 * */ public static void goToSleep(Context context) {PowerManager powerManager= ...
- python 多进程 调用模块内函数_python--多进程的用法详解实例
想让python实现多进程(multiprocessing),我们要先区分不同的操作系统的不同之处. Linux操作系统下提供了一个fork()系统调用,普通函数调用一次返回一次,fork()调用一次 ...
- mysql排他锁和共享锁视频_分享MySQL 中的共享锁和排他锁的用法
在 MySQL 中的行级锁.表级锁和页级锁中,咱们介绍过,行级锁是 MySQL 中锁定粒度最细的一种锁,行级锁能大大减少数据库操作的冲突.行级锁分为共享锁和排他锁两种,本文将详细介绍共享锁和排他锁的概 ...
最新文章
- Domino Web开发规则之三:以资源管理库为中心开发
- docker选择安装位置_如何使用docker 1.13版本更改centos 7中的docker安装目录
- dalvik虚拟机执行流程_程序员必备的一些流程图
- 篡改referer_HTTP_REFERER的用法及伪造
- swift java_swift语法和java的比较
- 使用postman模拟上传文件到springMVC的坑:the request was rejected because no multipart boundary was found...
- sql按年、月、日、查询排序
- CCF201609-4 交通规划(100分)
- 斯坦福发布最新NLP处理工具stanfordnlp体验
- linux下udp调试工具,linux tcp udp 调试工具
- 用python编程分苹果_Python实现分苹果(递归)
- ipad上的html编辑器,它让我开始尝试在 iPad 上写作:MWeb for iOS 使用体验
- LM1875小功放电路解析与调校(出好声音)
- php实例视频播放代码,[h5]一个基于HTML5实现的视频播放器代码详解
- (10.2.1)15款优秀移动APP产品原型设计工具
- Win10系统如何调整分区大小?
- ORACLE中分钟用mm和mi 标示区别
- 选购摄像头前必看,摄像头参数科普
- 最炫丽的网页平面UI课程就在广州传智播客
- mysql将数据拟合曲线_强大的matlab数据科学拟合库cftool——直接导入数据进行拟合...
热门文章
- 【golang-GUI开发】struct tags系统(一)
- 计算机网络(1)--计算机网络和因特网
- linux下select,poll,epoll的使用与重点分析
- 数据库 基础学习7— 数据库编程
- java笔记--查看和修改线程名称
- C#捕获控制台(console)关闭事件
- 【sampleDateFormat】对日期进行解析
- 【vue】---动态路由传值
- mysql补0操作有什么意义?
- jQuery效果-----fadeIn()、fadeOut()、fadeToggle()、fadeTo()