block类型的概念和使用 - OC

block的基本使:

block类型的概念和使用 - OC_第1张图片
屏幕快照 2015-09-02 17.25.48.png

--------------->> int(p)(int, int ); 是函数指针*,所以block的定义和函数指针类似

block助记符:inlineBlock
block类型的概念和使用 - OC_第2张图片
屏幕快照 2015-09-04 12.59.27.png
  • 使用实例:
 int(^myblock)(int,int) = ^(int num1,int num2){
        
        return num1+num2;
    
    };
    
    int sum = myblock(3,5);   //把变量mybolck赋值给sum
    
    printf("sum = %d",sum);
block的typedef:
  • 给函数指针起别名:
typedef int (*NewType)(int x,int y);    //给一个函数指针起别名,NewType是一个类型
NewType f1,f2,f3    //f1,f2,f3为函数指针
  • 给block起别名:
    typedef 返回值类型(^新类型别名)(参数类型列表);
typedef int (^NewType)(int x,int y);    
NewType f1,f2,f3    
block访问外部变量:
  • 当定义block的时候,block会把外部变量的值以count的形式复制一份存放到block的所在内存中,如果引入的是全局变量,则不是以count方式复制
  • 复制进来变量的值不能进行修改,除非重新声明重名变量再进行修改,或者“__block int m = 10”这样声明变量就不会以count方式复制进来
  • 当外部变量定义方式为“__block int m = 10”,以后用m都是block代码段的m的值
block作为函数参数:
#import 

void work(void(^workBlock)()){

printf("起床\n");

workBlock();

printf("睡觉\n");

}

void workDay(int n){

work(^(){

    printf("了解项目\n");
});
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
   
  
    workDay(1);
    
    
}
return 0;
}
block作为函数返回值(4个步骤):
#import 

//1>使用typedef定义一个新的类型(block类型)
typedef void (^newType)();

//2>用新的类型作为函数的返回值
newType test(){

//定义block变量
newType w1 = ^(){

    NSLog(@"hello world");
};

return w1;  //返回值block
}

int main(int argc, const char * argv[]) {
@autoreleasepool {
   
    //3>定义block变量接收函数返回的结果
    newType n1 = test();
    
    //4>执行block
    n1();
    
    
}
return 0;
}

你可能感兴趣的:(block类型的概念和使用 - OC)