A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© RIDP 中级黑马   /  2015-10-16 17:12  /  872 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

编辑于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作为参数连续传递云云,表示摸不着头脑]

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马