黑马程序员技术交流社区

标题: iOS三期~今天学了block类型[笔记] [打印本页]

作者: SUPERREN_Hao    时间: 2016-1-11 13:36
标题: iOS三期~今天学了block类型[笔记]
有点难理解啊~~~~~~~~~

        函数:
            
            void test(){
                *********代码
            }

        函数分类:

            函数                                  代码块类型

            无参无返                                无参无返回值
            有参无返                                有参无返回值
            有参有返                                有参有返回值
            无参有返                                无参有返回值


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

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

        block兼容,OC C++,与c语言




block 它设置的变量可以用来存储一块代码段。
例如:
    void test(){                    test()后的代码块存储在block后的。
        int a=3;                        就是在block 定义的变量的内容就是在{}的内容 block a = {};
        int b=4;        --------->
        int sum =a+b;
    }
      


Blocl 的基本用法。

        用^(脱字符)在操作赋来什么一个Block变量,并且给Block句的开始,Block的主体部分饱含在{}内,
            ^符号将myBlock                 整体就是给myBlock赋值的代码
            声明为一个块对象       代码块的形式参数
        int (^myBlock)(int) = ^(int num){return num * multiplier;};
    代码块返       表示有一个参数                  块对象的主体部分
    回值类型        且,参数类型是
                    int类型
*/

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
//        1,无参无返回值的代码块的使用
//        格式:void (^block 变量名)(参数);
//        使用block的步骤
//        1)定义block类型的变量
//        2)给变量赋值代码
//        格式:block变量名=^(){};注意此处分号必须有!
//        3)使用block变量(执行这个代码),格式:block变量名();
        
        void (^test)();//定义了一个block变量,无参无返;
        test = ^(){
            NSLog(@"我是block test!");
        };
//        给test重新赋值
//        如果没有参数,小括号可以省略
        test=^{
            int m=18;
            int s=m+18;
            
            NSLog(@"xxxxxx   %d",s);
        };
        
//        执行代码块
        test();
        
//        定义block变量,变量名为test2
//        2,有参数没有返回值的block的使用
//        格式:void (^block变量名)(参数列表) = ^(形式参数列表){};
//        void test2(int a ,int b){b
//            NSLog(@"a+b = %d",a+b);
//        }
        void (^test2)(int a,int b) = ^(int a,int b){
            NSLog(@"a+b = %d",a+b);
        };
//        使用
        test2(3,6);
        
//         3,有参数/有返回值的block的使用;
//        格式:返回值类型(^block变量名)(参数类型) = ^(行参列表){代码块主体};
//        int max(int x,int y){
//            
//            return x>y?x:y;
//        }
//        定义了一个有返回值,有两个整形参数的block类型的变量,名成为max;
        int (^max)(int x,int y) = ^(int x,int y){
            
            return x>y?x:y;
        };
        int m = max(12,34);
        NSLog(@"m = %d",m);
    }
    return 0;
}


感谢发达哥~
作者: 木叶    时间: 2016-1-11 20:18
顶一下先!!
作者: zhuyapeng    时间: 2016-1-12 21:14
顶一下顶一下
作者: 364827317    时间: 2016-1-13 03:47
顶顶顶顶




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2