IOS基础之 (十二) Block

一 定义

Block封装了一段代码,可以在任何时候执行。

Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。

二 使用

1. 定义函数指针,然后在实现。

 1 #import <Foundation/Foundation.h>
 2 
 3 int (^max)(int,int);
 4 
 5 int main(int argc, const char * argv[]) {
 6 
 7     max = ^(int a,int b){
 8         
 9         return a >b ? a:b;
10     };
11     
12     int maxVal = max(5, 13);
13     NSLog(@"maxVal=%d" , maxVal );
14     
15     return 0;
16 }

在第3行定义函数指针,在第7行实现函数指针,在12行调用函数指针。

2. 在定义函数指针的同时,并实现。

#import <Foundation/Foundation.h>

int (^max)(int,int) = ^(int a, int b){
    return a > b ? a : b;
};

int main(int argc, const char * argv[]) {
    int maxVal = max(5, 13);
    NSLog(@"maxVal=%d" , maxVal );
    
    return 0;
}

3.用typedef先声明类型,再定义变量进行赋值

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    typedef int (^max)(int,int);
    max getMax = ^(int a, int b){
        return a > b ? a:b;
    };
    
    int maxVal = getMax(5, 13);
    NSLog(@"maxVal=%d" , maxVal );
    
    return 0;
}

Block可以访问局部变量,但是不能修改。 

1  int sum = 10;
2  int (^myBlock)(int) = ^(int x){
3         int result = sum++;
4         return x * x;
5  };

如果要修改就要在第一行加关键字:__block

__block int sum = 10;
int (^myBlock)(int) = ^(int x){
        int result = sum++;
        return x * x;
};

资料参考:

http://www.cnblogs.com/ljcgood66/p/4970628.html

http://www.cnblogs.com/e8net/p/3750825.html

http://www.cnblogs.com/goodboy-heyang/p/5240004.html

原文地址:https://www.cnblogs.com/wangshuo1/p/IOS-12.html