09-10、Block基本概念

Block在OC中是一种数据类型,那么就可以定义变量,作为形参,作为返回值。
复习C语言中指向函数的指针,对于Block学习大有帮助,因为他们很像。

09-10、Block基本概念_第1张图片
Snip20170927_77.png
main.m
#import 


void printRose(int num)
{
for (int i = 0; i < num; ++i) {
    
    printf("  {@} \n");
    printf("   |  \n");
    printf("  \\|/ \n");
    printf("   | \n");
}
}

int sum(int value1, int value2)
{
return value1 + value2;
}
int main(int argc, const char * argv[]) {
/*
第一个例子:没有返回值,也没有形参
// void代表指向的函数没有返回值
// ()代表指向的函数没有形参
// (*roseP)代表roseP是一个指向函数的指针
//    void (*roseP) ();
//    roseP = printRose;
//    roseP();

// 定义一个block变量,
// block和函数一样,可以没有返回值,也没有形参
// 也可以没有返回值有形参
// 也可以有返回值没有形参
// 也可以有返回值有形参
// 所以, 在定义一个block变量的时候, 也需要告诉该变量将来保存的代码有没有返回值和形参

// void代表block将来保存的代码没有返回值
// ()代表block将来保存的代码没有形参
// (^roseBlock) 代表reseBlock是一个block变量, 可以用于保存一段block代码
void (^roseBlock) ();
// 如果block没有参数, 那么^后面的()可以省略
roseBlock = ^(){
    printf("  {@} \n");
    printf("   |  \n");
    printf("  \\|/ \n");
    printf("   | \n");
};
// 要想执行block保存的代码, 必须调用block才会执行
roseBlock();
roseBlock();
 */
/*
 第二个例子:没有返回值,有形参
//    printRose(10);

//    void (*roseP)(int);
//    roseP = printRose;
//    roseP(3);

void (^roseBlock) (int);
roseBlock = ^(int num){
    for (int i = 0; i < num; ++i) {
        
        printf("  {@} \n");
        printf("   |  \n");
        printf("  \\|/ \n");
        printf("   | \n");
    }

};

roseBlock(2);
 */

/*
 第三个例子:有返回值,有形参
//    int (*sumP)(int, int);
//    sumP = sum;
//    NSLog(@"sum = %i", sumP(10 , 20));

int (^sumBlock) (int, int);
sumBlock =^(int value1, int value2){
    return value1 + value2;
};
NSLog(@"sum = %i", sumBlock(10, 40));
 */

//基本数据类型可以先定义再初始化,也可以定义的同时再初始化
//    int a = 10;
//    int b;
//    b = 20;

// 因为block是一种数据类型可以先定义再初始化,也可以定义的同时再初始化
//    int (^printBlock)(int);
//    printBlock = ^int (int num){
//        for (int i=0; i

你可能感兴趣的:(09-10、Block基本概念)