block相关归纳

经过今天的Block的学习、上网查询相关文章归纳了一下

一、一个使用Block的好处有:

  1. Block可以用在许多不同的环境中,这样可以让代码更加简单,以及减少函数声明的数量,不用实现代理协议。

  • 简单性:使用 Block 我们可以不写任何附加的代码就可以访问对象,对象在数组中的索引,stop 变量。
    这意味着少量的代码,减少了发生编码错误的机会(当然,并非我们一定会出现编码错误)。

  • 速度:使用 Block 在执行速度上要比使用快速枚举快。
    在我们这个例子中,这点微小的速度提升不值得一提,但是在更复杂的情况下,这个优势就越来越重要。

  • 更简单的代码:使用 Block, 我们不再需要单独定义一个回调方法,保持代码在一起。使用 Block,
    我们不再需要在一个地方开启动画,然后再另外一个地方处理回调。 所有和我们动画相关的代码都在一处,这样让他的可读性和维护性更强。

  1. 适用作工作单元,通常用来做并发任务、遍历、排序、以及回调。

关于Block的一些使用注意点:

  • 一个Block的内部时可以引用自身作用域外的变量的,包括static变量,extern变量或自由变量(定义一个变量的时候,如果不加存储修饰符,默认情况下就是自由变量auto,auto变量保存在stack中的。除了auto之外还存在register,static等存储修饰符),对于自由变量,在Block中只读的。在引入block的同时,还引入了一种特殊的__block关键字变量存储修饰符。

  • 代码块本质上与变量一样,都在函数中声明然后使用,只不过一个变量中存储一个值,一个代码块存储一个函数体(一段代码);

  • 代码块的定义:有返回值,有参数,有变量名;

  • __block关键字 修饰局部变量,使局部变量变得特殊,可以在block代码块中使用:

  • 把全局变量和局部变量作为参数传递到一个函数中,这个变量会copy一份传入到函数,函数中做的操作不会影响变量的值(根本就是两个东西)。

  • 把全局变量和局部变量作为参数传递到一个代码块中,局部变量必须要__block来修饰,用来告诉编译器这个局部变量有些特殊可以在代码中使用,这些变量在代码块中使用就是本来的变量。

参考资料:

如何在 iOS 5 中使用 Block (1)http://www.raywenderlich.com/zh-hans/18752/%E5%A6%82%E4%BD%95%E5%9C%A8-ios-5-%E4%B8%AD%E4%BD%BF%E7%94%A8-block-1
如何在
iOS 5 中使用 Block (2)http://www.raywenderlich.com/zh-hans/18753/%E5%A6%82%E4%BD%95%E5%9C%A8-ios-5-%E4%B8%AD%E4%BD%BF%E7%94%A8-block-2

block相关归纳,布布扣,bubuko.com

时间: 2024-12-24 03:58:02

block相关归纳的相关文章

Linux Centos的Inode及Block相关知识

本经验均在CentOSrelease6.7(Final)下操作,如知识有欠缺之处 欢迎批评指正. linux 的inode及block的相关知识: 1>  Linux系统分区格式化文件系统之后,系统会分为Inode及Block两部分: 1)Inode为系统文件的属性信息(ls -l的结果)及指向文件实体的指针,但是没有存放文件名,一般在上级目录里的Block. 2)Block为存放数据的,ext3/ext4一般为1k,2k,4k,一般默认4k 3)一个文件不论多大至少占用一个Inode和一个Bl

block相关知识点

Block简介1.Block类似于函数,指向一块代码的指针(类似C中的回调函数)Block经常用来代替delegate2.跟函数的写法基本是一致的  声明 + 实现 + 调用    2.1声明:^ 脱字符                    返回类型(^Block的名字)(类型1 参数1,类型2 参数2……):    2.2 实现:Block的名字 = ^(类型1 参数1……){  }   2.3 调用:如果不调用,那么代码块中的内容是不会执行的,什么时候调用,就什么时候执行         

Block相关

OC代码: 1 int main(int argc, const char * argv[]) { 2 3 void (^blk)(void) = ^{ 4 printf("Block\n"); 5 }; 6 7 blk(); 8 9 return 0; 10 } 通过Clang -rewrite-objc命令转成C语言代码: 1 struct __block_impl { 2 void *isa; 3 int Flags; 4 int Reserved; 5 void *FuncPt

OC高级编程——深入block,如何捕获变量,如何存储在堆上

首先先看几道block相关的题目 这是一篇比较长的博文,前部分是block的测试题目,中间是block的语法.特性,block讲解block内部实现和block存储位置,请读者耐心阅读.具备block基础的同学,直接调转到block的实现 下面列出了五道题,看看能否答对两三个.主要涉及block栈上.还是堆上.怎么捕获变量.答案在博文最后一行 //-----------第一道题:-------------- void exampleA() { char a = 'A'; ^{ printf("%

格而知之15:我所理解的Block(1)

1.Block 本质上是一个struct结构体,在这个结构体中,最重要的成员是一个函数(当然除函数外还有其他重要的成员). 2.在开始解析Block之前,首先来回顾一下Block的格式.Block相关的格式有2个: (1).Block对象的格式: (2).Block变量的格式: 3.对于Block对象,它有几种常见的格式: (1).一个完整的Block对象的格式如下: 比如这个Block对象: 可以发现,完整的Block对象和函数的定义非常相似,比如这个函数: 两者之间的区别仅仅是:Block对

让我们来深入浅出block吧

http://www.jianshu.com/p/e03292674e60 开始之前,我想先提几个问题,看看大家是否对此有疑惑.唐巧已经写过一篇对block很有研究的文章,大家可以去看看(本文会部分引用巧哥文中出现的图和代码).在巧哥的基础上,我补充一些block相关的知识点和代码,并且概括并修正一些观点. 1.block是什么?block是对象吗? 2.block分为哪几种?__blcok关键字的作用? 3.block在ARC和MRC下的区别? 4.block的生命周期? 5.block对于以

iOS中block实现的探究

[0. Brief introduction of block] Block是iOS4.0+ 和Mac OS X 10.6+ 引进的对C语言的扩展,用来实现匿名函数的特性. 用维基百科的话来说,Block是Apple Inc.为C.C++以及Objective-C加入的特性,使得这些语言能够用类lambda表达式的语法来创建闭包. 用Apple文档的话来说,A block is an anonymous inline collection of code, and sometimes also

(译)IOS block编程指南 1 介绍

Introduction(介绍) Block objects are a C-level syntactic and runtime feature. They are similar to standard C functions, but in addition to executable code they may also contain variable bindings to automatic (stack) or managed (heap) memory. A block ca

Oracle RAC 全局等待事件 gc current block busy 和 gc cr multi block request 说明--转载(http://blog.csdn.net/tianlesoftware/article/details/7777511)

一.RAC 全局等待事件说明 在RAC环境中,和全局调整缓存相关的最常见的等待事件是global cache cr request,global cache busy和equeue. 当一个进程访问需要一个或者多个块时,Oracle会首先检查自己的Cache是否存在该块,如果发现没有,就会先通过global cache赋予这些块共享访问的权限,然后再访问.假如,通过global cache发现这些块已经在另一个实例的Cache里面,那么这些块就会通过Cache Fusion,在节点之间直接传递,