黑马程序员技术交流社区

标题: RIDP Note XII——Block概述 [打印本页]

作者: RIDP    时间: 2015-10-16 17:12
标题: RIDP Note XII——Block概述
编辑于winbook]
//        OC中相对于C语言多出来的数据类型有 SEL  id  block  BOOL等
        
         block类型是一个C级别的语法和运行机制,它与标准的C函数类似,不同之处在于,它
         除了有可执行代码以外,它还包含了与堆、栈内存绑定的变量。因此,block对象包含
         着一组状态数据,这些数据在执行时用于对行为产生影响。
         
         我们可以利用block来写一些可以传到API的函数语句,可选择性的存储,并可以使用
         多线程。作为一个回调,block特别有用,因为block不仅包含了回调期间的代码,又
         包含了执行期间需要的数据。
         
         block同时兼容OC,C++,C。
         
         [如何声明一个block变量]
         
         用符号^来声明一个block变量,并且指明block语句的开始,block的主体部分包含
         在{}内,以;标识语句的结束。
         
         
        
//格式范例:  int   (^blockName)   (int)    =  ^(int name)        {return name * 3;}
//格式解读: 返回类型(^块对象名称)(参数类型)  = ^(参数类型 参数名称){语句};
//        block调用方式和函数基本一致
//调用    块变量名();
    }
//    bloc最简单声明
//    无参无返回值
    void (^testblock1)()=^(){//如果没有参数,等号右边可以去掉括号
        NSLog(@"This is a block");
    };
//    无参有返回值
    int (^testblock2)()=^(){
        return 12;
    };
//    有参无返回值
    void (^testblock3)(int)=^(int num){
        NSLog(@"num x 2 = %d",num*2);
    };
//    有参有返回值
    int (^testblock4)(int)=^(int num){
        return num+100;
    };
   
    testblock1();
    int test = testblock2();
    NSLog(@"test  = %d",test);
    testblock3(10);
    int test2 = testblock4(80);
    NSLog(@"test2 = %d",test2);
   
   
   
   
   
   
    Person *p = [Person new];
    [p test:^{
        NSLog(@"这是将要被调用的Block方法");
    }];
——————————————————————————————————
person.m
——————————————————————————————————
#import "Person.h"【在person.h中有对应方法声明,此处略】

@implementation Person
-(void)test:(void (^)())block{
    if (block != nil) {
        block();
        NSLog(@"Block调用完成");
    }
}
@end

[附录:实际上LZ本人很少使用block,感觉略眩晕- -尤其是block作为参数连续传递云云,表示摸不着头脑]




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