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当做锁的用法相关推荐

  1. MySQL锁的用法之行级锁

    转:http://www.kubiji.cn/topic-id2510.html 行级锁是mysql中粒度最小的一种锁,他能大大减少数据库操作的冲突.但是粒度越小,实现的成本也越高.myisam引擎只 ...

  2. C++中有关queue常用函数的用法及其注意要项

    11:C++中有关queue常用函数的用法及其注意要项 #include<bits/stdc++.h> using namespace std; int main(){queue < ...

  3. mysql 锁怎么使用_MySQL锁的用法之行级锁

    行级锁是MySQL中粒度最小的一种锁,他能大大减少数据库操作的冲突.但是粒度越小,实现的成本也越高.MYISAM引擎只支持表级锁,而INNODB引擎能够支持行级锁,下面的内容也是针对INNODB行级锁 ...

  4. RabbitMQ高可用--Quorum Queue(仲裁队列)的用法

    原文网址:RabbitMQ高可用--Quorum Queue(仲裁队列)的用法_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍RabbitMQ的Quorum Queue(仲裁队列)的用法. 官 ...

  5. js实现一个既可以当做对象调用也可以当做函数调用的方法

    定义一个方法,让他既可以当做函数直接调用,也可以当做对象调用. // 创建一个函数 function MainFn(params){this.MainFnObj = {name: 'mainFnNam ...

  6. go 调用etcd实现分布式锁

    package workerimport ("context""fmt""go.etcd.io/etcd/clientv3""ti ...

  7. android 调用锁屏,Android反射调用goToSleep实现一键锁屏、亮屏

    /** * 关闭屏幕 ,其实是使系统休眠 * */ public static void goToSleep(Context context) { PowerManager powerManager= ...

  8. Android反射调用goToSleep实现一键锁屏、亮屏

    /** * 关闭屏幕 ,其实是使系统休眠 * */ public static void goToSleep(Context context) {PowerManager powerManager= ...

  9. python 多进程 调用模块内函数_python--多进程的用法详解实例

    想让python实现多进程(multiprocessing),我们要先区分不同的操作系统的不同之处. Linux操作系统下提供了一个fork()系统调用,普通函数调用一次返回一次,fork()调用一次 ...

  10. mysql排他锁和共享锁视频_分享MySQL 中的共享锁和排他锁的用法

    在 MySQL 中的行级锁.表级锁和页级锁中,咱们介绍过,行级锁是 MySQL 中锁定粒度最细的一种锁,行级锁能大大减少数据库操作的冲突.行级锁分为共享锁和排他锁两种,本文将详细介绍共享锁和排他锁的概 ...

最新文章

  1. Domino Web开发规则之三:以资源管理库为中心开发
  2. docker选择安装位置_如何使用docker 1.13版本更改centos 7中的docker安装目录
  3. dalvik虚拟机执行流程_程序员必备的一些流程图
  4. 篡改referer_HTTP_REFERER的用法及伪造
  5. swift java_swift语法和java的比较
  6. 使用postman模拟上传文件到springMVC的坑:the request was rejected because no multipart boundary was found...
  7. sql按年、月、日、查询排序
  8. CCF201609-4 交通规划(100分)
  9. 斯坦福发布最新NLP处理工具stanfordnlp体验
  10. linux下udp调试工具,linux tcp udp 调试工具
  11. 用python编程分苹果_Python实现分苹果(递归)
  12. ipad上的html编辑器,它让我开始尝试在 iPad 上写作:MWeb for iOS 使用体验
  13. LM1875小功放电路解析与调校(出好声音)
  14. php实例视频播放代码,[h5]一个基于HTML5实现的视频播放器代码详解
  15. (10.2.1)15款优秀移动APP产品原型设计工具
  16. Win10系统如何调整分区大小?
  17. ORACLE中分钟用mm和mi 标示区别
  18. 选购摄像头前必看,摄像头参数科普
  19. 最炫丽的网页平面UI课程就在广州传智播客
  20. mysql将数据拟合曲线_强大的matlab数据科学拟合库cftool——直接导入数据进行拟合...

热门文章

  1. 【golang-GUI开发】struct tags系统(一)
  2. 计算机网络(1)--计算机网络和因特网
  3. linux下select,poll,epoll的使用与重点分析
  4. 数据库 基础学习7— 数据库编程
  5. java笔记--查看和修改线程名称
  6. C#捕获控制台(console)关闭事件
  7. 【sampleDateFormat】对日期进行解析
  8. 【vue】---动态路由传值
  9. mysql补0操作有什么意义?
  10. jQuery效果-----fadeIn()、fadeOut()、fadeToggle()、fadeTo()