黑马程序员-OC加强-Block

来源:互联网 发布:cad自学软件 编辑:程序博客网 时间:2024/05/19 02:42

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


一   Block的基本概念

        Block对象是一个C级别的语法和运行机制。它与标准的C函数类似。其不同之处在于,它除了有可执行代码以外,还包含了与堆、栈内存绑定的变量。因此Block对象包含着一组状态数据,而这些数据在程序执行时被用于对行为产生影响。

        Block可以被用来写一些可以传到API中的函数语句,可选择性地存储,并可以使用多线程。 作为一个回调,Block特别的有用,因为block既包含了回调期间的代码,又包含了执行期间需要的数据。

        由于无论OC语言或是C++语言,都是衍生自C语言的,所以block当初被设计时,就可以同时兼容以上全部三种语言。 

二   Block的形式

       1)最简单的格式

         定义格式:

                void (^block)() = ^{代码块}

         使用格式:

                  block();

例如:void(^myblock)()= ^{

NSLog(@"hello world");

}

//执行时,把block当成函数

myblock();

       2)有参数的定义和使用

         定义格式:

                void (^block)(参数列表) = ^(参数列表){代码块}

例如:

                void (^SumBlock)(int,int) = ^(intx,inty){

NSLog(@"%d",x+y);

}       


         使用格式:

                  SumBlock(12,52);

       3)有参数有返回值的定义和使用

         定义格式:

                返回类型 (^block)(参数列表) = ^(参数列表){代码块}

例如:

                int (^SumBlock2)(int,int) = ^int(intx,inty){

NSLog(@"%d",x+y);

}       


     使用格式:

                 NSLog(@"%d",SumBlock(14,24)); 

三   Block的实例

















0 0