iOS开发iOS DeveloperiOS学习笔记

OC中block知识点使用方法

2016-09-15  本文已影响122人  woooooo

block

作用

    //定义block变量
    void (^myblock)() = ^ {
      //没有形参可以省略后面的()
        NSLog(@"----");
    };
    
     //利用block调用block内部的代码
    myblock();
    int (^sumblock)(int, int) = ^(int a, int b) {
        return a + b;
    };
    
    int c = sumblock(10,11);
    
    NSLog(@"%d",c);
    

block的重定义

定义一个两数之和的函数
int sum(int a, int b) {
    return a + b;
}

定义两个函数指针指向sum
    int (*p1)(int, int) = sum;
    int (*p2)(int, int) = sum;
    
因为代码过多重复我们可以typedef重定义一个函数指针类型

typedef int (*SumP)(int, int);   
//ps:重定义函数指针 (*SumP)中SumP就是类型名

以后我们就可以这样定义两个函数指针

    SumP p3 = sum;
    
    SumP P4 = sum;

block访问外面的变量

block内部可以访问外部变量

    int a = 5;
    
    void (^blockA)() = ^() {
        
        NSLog(@"%d",a);
    };
    
    blockA();

打印结果为

2016-09-15 14:01:18.552 block[590:22729] 5

默认情况下block内部不能修改外面的局部变量

    
    int a = 5;
    
    void (^blockA)() = ^() {
        
        a = 3;
    };
    
    
    __block int a = 5;
    //变量前加上__block修饰符
    void (^blockA)() = ^() {
        
        a = 3;
    };
    
    blockA();

typedef重定义block类型

 typede int (^MyBlock)(int, int); MyBlock 是类型名
 
 MyBlock sumBlock;
 //定义一个MyBlock类型的变量
 sumBlock = ^(int a, int b) {
        return a + b;
    };
//给block变量赋值保存的代码


我们定义一个减法类型的
    MyBlock minusBlock = ^(int a, int b) {
        return a - b;
    };
    
    int minus = minusBlock(25,12);
    
    NSLog(@"%d",minus);
 
 //使用MyBlock类型连续定义变量 
   MyBlock a, b; 

总结

1>.如何定义block变量

int (^sumBlock)(int, int);
 void (^myBloc)();

2> 如何利用block封装代码

^(int a, int b) {
 return a - b;
 }
 
 ^() {
 NSLog(@"--------");
 }
 
 ^ {
  NSLog(@"--------");
 //参数为空时()可以省略
 }

3> block访问外部变量

4>利用typeddef定义block类型



typedef int (^MyBlock)(int, int);




MyBlock block; //定义一个MyBlock 类型的变量
 
 MyBlock block1, block2; //连续定义两个MyBlock 类型的变量
 
 
 block1 = ^(int a, int b) {
 
 return a - b;
 };
 
 MyBlock block3 = ^(int a, int b) {
 return a + b;
 };
上一篇 下一篇

猜你喜欢

热点阅读