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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© unnamed 中级黑马   /  2015-7-8 11:38  /  617 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

blocks的概念:
Block是OC中的一种数据类型,和c语音函数指针类似,运行需要编译器和运行时的支持(ios4.0开始支持 Blocks )两个对象之间通信,用到Blocks,相当于回调函数。


blocks和C语言函数指针的区别:
int (*CFunc) (int a);

返回类型 (标志符号 名称) (参数类型 参数名);

int(^Blocks) (int a);


blocks的声明(定义):


void (^myBlocks) () = NULL;
void (^myBlocks2) (NSString *name,int score) = NULL;  

(返回类型)(^块名称)(参数类型)

blocks的使用:

1.赋值


myBlocks = ^(){  

      NSLog(@"hello!");  
  };  

  /*
   //后面没有参数的时候括号可以省略
   myBlocks = ^{

   NSLog(@"hello!");
   };
   */  



     //行参名可以省略
     void (^myBlocks2) (NSString *,int) = NULL;
     */  
    myBlocks2 = ^(NSString *name,int score){  

        NSLog(@"%@,you got %i point",name,score);  
    };  

1.调用

myBlocks();  
myBlocks()2;  



如果没有参数,等号后面参数列表的()可以省略,例如


void (^myBlocks) = NULL;  
myBlocks = ^{  
    NSLog(@"It's Ok!");  
}  


blocks作为函数形参:

void printWithBlocks(void (^blocks) ())  
{  
    blocks();  
}
printWithBlocks(  
        myBlocks            
);  

_block关键字:
作用:可以让blocks访问被_block修饰的外部变量,相当于被_block修饰的变量变为全局变量。

示例代码:


void test()  
{  
    int a = 1;  
    __block int b = 2;  

    void (^block)();  

    block = ^{  
        // block内部可以访问外面的变量  
        //NSLog(@"a = %d", a);  

        // 默认情况下,block内部不能修改外面的局部变量  
        // a = 20;  

        // 给局部变量加上__block关键字,这个局部变量就可以在block内部修改  
        b = 25;  
    };  


    block();  
}  


0 个回复

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