Blcok

1.Java代码说明blcok

就是java中匿名内部类,而匿名内部类的好处是代码更清晰

例如

button btn = new Button().setListener(newListener(){

//  这里写上监听的代码,这样就可以很直观的观察到这个btn要干啥了

//  例如这里写个发送邮件的代码,这样人们就知道你这按钮是点击后是发    //送邮件的功能

});

而如果不写这种方法你就需要这么写

class activity implements OnClickListener{

onCreate(){

button btn = new Button();

btn.setListen(this);

}

// 这里有很多其他代码如让你感觉很乱,例如其他方法

onClick() {

//送邮件的功能

}

}

2.oc代码说明blcok

-(IBAction)buttonTapped:(id) sender {

UIAlertVeiw *alert = [[UIAlert alloc]initWithTitle:@”send email”

Message :@“ send it ?”

Delegate:self

cancelbutonTitle:@”cancel”

otherButtonTitle:@”send”,nil]

[alert show]

[alert release]

}

- (void) alertView:(UIAlertView*) alertViewdidiDismissWithButtonIndex:(NSInteger) buttonIndex {

if(buttonIndex != [alertView cancelButtonIndex]) {

[self sendTheMail];

}

}

- (void) sendTheMail{

//发送邮件代码

}

使用block 的匿名内部方法写

[UIAlertView showAlertViewWithTitle:@"send email"

message:@"send it?"

cancelButtonTIle:@"cancel"

otherButtonTitles:[NSArray arrayWithObjects:@"send",nil]

onCompletion:^{

//发送邮件代码

//多说一句 ^{} 这个就是block 的实现,由于没有参数输 入也就省了,要不就是这样 ^(int i, int j){}

}

onCancel:^{

//退出代码

}

]

这样就清楚多了

不需要实现委托(实现接口) delegate:selft

不需要分配和释放对象       [alert release]

不需要明确的显示警告对话框 [alertshow]

3 block作用域

和java不同在java匿名内部类里面是不可以访问它外面的代码的,除非你把代码定义为 final

而block 不需要定义final,直接用就ok 的

main(){

intc = 25;

^(int i, int j ) {

NsLog(@”%i”,c);//这里直接能打印c变量的值,但不能改变也就是c = 19这里不行

}

}

如果非要想改也可以用__block 关键字

main(){

__Block int c = 25;

^(int i, int j ) {

c = 19;

NsLog(@”%i”,c);//这里就可以改变c = 19的值了

}

}

4.block和函数区别

函数不能定义在其他函数体内,block却可以,他就是一段代码块,而不是函数,但是跟函数是很像的

5.GCD与block

说白了就是在ios中有一些下载是需要放在后台来做的,这时候就需要异步,而GCD就是用于做异步的

一般移动平台上系统都会有一个专门的检查机制,看程序有没有很长时间被阻塞住,没有回来检查主消息队列。发现这种情况一般都是把程序作为“无响应”干掉。iOS一般情况下是10秒为上限。10秒内程序没有回到主消息循环就被干掉。在前台后台切换时更严格,大概是5秒左右

// 用户点击了按纽,触发计算操作

- (void) didTapCalcButton {

// 显示“请等待”提示

[self showWaitingView];

// 以下两行将任务排程到一个后台线程执行。dispatch_get_global_queue会取得一个系统分配的后台任务队列。

dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_async(queue, ^{

// 计算PI值到100万位。和示例1的calcPI:完全一样,唯一区别是现在它在后台线程上执行了。

NSString *result = [self calcPI:1000000];

// 计算完成后,因为有UI操作,所以需要切换回主线程。一般原则:

// 1. UI操作必须在主线程上完成。2. 耗时的同步网络、同步IO、运算等操作不要在主线程上跑,以避免阻塞

// dispatch_get_main_queue()会返回关联到主线程的那个任务队列。

dispatch_async(dispatch_get_main_queue(), ^{

// 关闭“请等待”提示

[self hideWaitingView];

// 显示结果

[self displayResult:result];

});

});

}

6.GCD与NSOperationQueue

与GCD一样的还有个NsperationQueue的队列机制(GCD 也是队列),他们的优势在于多核心处理,可以确保一个独立单元在多个处理器上

他们的区别是

1.GCD只支持FIFO(先进先出)队列,而NSOperationQueue可以被重新排序(按优先级排序)

2.如果某个操作需要另一个操作生成的数据,可以让这个操作依赖另一个操作,NSOperationQueue会自动按照顺序正确的执行,而GCD没有这个功能

3. NSOperationQueue兼容KVO,这意味着你可以观察任务的状态。

4.GCD的执行速度是比NSOperationQueue快的,如果你需要性能的话推荐使用GCD这个,而且通常情况下,任务之间是不会相互依赖的,高德纳说过“过早的优化是万恶之源”只有在Instruments显示有必要性能提升的时候才用GCD

关于过早的优化,可以举出fermax gu的installer 页面问题,由于打开页面需要数据,而没有做分页,导致1w条数据在打开页面的时候直接出现加载1w条数据,所以页面打开很慢,而由于是pc 加载1w条数据还是比较快,大概4秒就能开发,所以只是短暂的卡,并没有发现大问题,老大说要优化页面的时候,我说出要找到真正的问题点去优化,而不是到处啥重构,到处瞎优化

7.block优势

如果用于委托的话

1.不需要分配或者释放对象

2.不需要实现委托

3.内部代码块可以访问外部变量

4.减少代码

例如在ios3中实现动画你需要设置一堆参数,大概需要5-6行

[UIView beginAnimations:@"" context:&myContext];

[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

[UIView setAnimationDuration:1.0f];

[UIView setAnimationDelay:1.0f];

[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:)];

self.imageView.alpha= 0.0;

[UIView commitAnimations];

而有了block后可以这么写,代码变简单了不是吗?

UIView animateWithDuration:1.0 delay:1.0options:UIViewAnimationCurveEaseInOut

animations:^{

self.imageView.alpha= 0.0;

}

completion:^(BOOL finished) {

[self.imageViewremoveFromSuperView];

}

又例如在遍历代码的字典的时候也可以使用block,不用跟objetForkey什么的打交道了

[dictionary emumerateKeysAndObjectsUsingBlock:^(id key, id val, bool *stop){

NSLog(@"@",@"%@", key,val);

}];

8.block一般在什么地方能用

对于一个方法,检查当前方法是否存在上下文参数,如果有,那就很有可能会有基于block的等价方法

寻找委托,一般通过委托方法来通知结果的类你可能会找到一个completionHandler

大部分遍历、排序、过滤方法都有基于block的等价方法,array dicitonary string

sttibutedString FileManager都有的

Java库转oc,(java转行oc)什么是block,用java来解释oc中的block相关推荐

  1. 在分析了47,251个依赖关系之后,2016年排名前100的Java库

    谁在上面,谁在后面? 我们分析了Github上的47,251个依赖关系,并抽取了前100个Java库 长周末我们最喜欢的消遣是浏览Github并搜索流行的Java库. 我们决定与您分享乐趣和信息. 我 ...

  2. Java 库文件的添加教程

    Java 库文件的添加教程 准备步骤和注意事项 导入到 IntelliJ IDEA 中 导入到 Eclipse 中 设置类路径 准备步骤和注意事项 前提是已经有了需要添加的库文件,一般是 .jar 文 ...

  3. java库加载,Java:使用依赖项加载共享库

    这是一个老问题,但我找到了一个可接受的解决方案,也应该是可移植的,我想我应该发布一个答案.解决方案是使用 JNA的 NativeLibrary#getInstance(),因为在Linux上,这将把R ...

  4. 2016年度最受欢迎的100个 Java 库

    [编者按]本文作者为 Henn Idan,主要介绍基于 GitHub 中的数据分析,得出的2016年度最受欢迎的100个 Java 库.本文系国内 ITOM 管理平台 OneAPM 编译呈现. 谁拔得 ...

  5. java 图形库_OpenGL开放图形java库jogamp-all-platforms.7z

    java OpenGL 的环境配置 开发环境: Windows 系统: Eclipse开发工具: 配置过程: 1.机器上验证java已安装 控制台下输入命令:java 输出结果为 java用法则已安装 ...

  6. 这6个高效的Java库,你知道吗?

    我们都知道,Java编程语言具有强大的开源的数据库,这些数据库很大程度上在工作过程中为程序员们提供很大的帮助.但是,对于很多零基础入门Java的新手来说,到底Java有哪些高效的开源库,可以让他们更好 ...

  7. Java黑皮书课后题第10章:**10.23(实现String类)在Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString2)

    **10.23(实现String类)在Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString2) 题目 简短的吐槽 代码:这里将类名改用Test23_MyStrin ...

  8. 盘点 20多种基本Java库和API,值得收藏!

    今天给大家收集的一些有用的第三方库,Java开发人员应该掌握,欢迎收藏! 1.单元测试库[JUnit和Mockito] 单元测试是将普通开发人员与优秀开发人员区分开的最重要的事情.经常为程序员提供不编 ...

  9. 2018年不能错过的 14 个 Java 库

    转载自 2018年不能错过的 14 个 Java 库 下面是整理给你的 2018 年不应该错过的 14 个 Java 库包清单,多多少少大家应该都接触过一些,如果还没听过那就OUT了. Guice G ...

  10. github上java项目_GitHub上10,000个最受欢迎的Java项目-以下是他们使用的顶级库

    github上java项目 随着Java开发人员使用既成熟又高度发展的语言来工作,无论何时编写新代码,我们都将面临一个持续的困境–使用大家都在谈论的热门新技术,或者坚持使用久经考验的库? 由于Java ...

最新文章

  1. linux 无法挂载系统,解决无法挂载Linux文件系统的问题
  2. Caffe源码解析5:Conv_Layer
  3. 缓解数据包丢失对WAN的影响是当务之急—Vecloud微云
  4. 金城教授:基于手绘草图的图像检索技术研究
  5. 22种代码味道(Martin Fowler与Kent Beck)
  6. linux系统安装后需要的有效小工具(持续更新)
  7. 别再Prompt了!谷歌提出tuning新方法,强力释放GPT-3潜力!
  8. 花书+吴恩达深度学习(三)反向传播算法 Back Propagation
  9. PyQt5教程(二)——PyQt5的安装(详细)
  10. 微信淘宝客小程序开发多多客京东客六合一系统外卖cps返利源码
  11. CorelDRAWX4的VBA插件开发(三)VBA的必用基础知识
  12. SCSI代码分析(2)SCSI设备的管理1
  13. parrot linux 输入法,nur kirguzguq
  14. DDR的Controller、Channel、Chip、Rank、Bank、Row、Column、Sided
  15. 电源设计基础笔记:DC-DC与LDO电路
  16. C/C++语言100题练习计划 98——最长最短单词
  17. 考研高数常遇到奇函数偶函数,怎么去判定(定积分/二重积分中奇偶性判断)?
  18. 马云励志演讲:要相信80后、90后创业
  19. Python项目 外星人入侵游戏
  20. 计算机未来的发展趋势

热门文章

  1. 2.mysql高级查询
  2. UVa 10129 - Play on Words (欧拉回路, DFS)
  3. activiti 源码笔记之startProcess
  4. 变量声明和定义及extern 转载
  5. android腾讯微博吹一吹实现原理
  6. Java线程的6种状态、NEW、RUNNABLE、BLOCK、TIMED_WAITING、TERMINATED
  7. 浅谈Http协议、TCP协议
  8. RocketMQ(十五) RocketMQ如何保证消息的可靠性?
  9. 垃圾收集器分类与GC性能指标
  10. MyBatis源码阅读(七) --- 查询结果集封装流程