09-10、Block基本概念

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

Snip20170927_77.png
main.m
#import <Foundation/Foundation.h>


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<num; ++i) {
//            printf("--------\n");
//        }
//        return 1;
//    }


int (^printBlock)(int)= ^int (int num){
    for (int i=0; i<num; ++i) {
        printf("--------\n");
    }
    return 1;
}
printBlock(2);


return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 Blocks是C语言的扩充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了这...
    小人不才阅读 3,787评论 0 23
  • 《Objective-C高级编程》这本书就讲了三个东西:自动引用计数、block、GCD,偏向于从原理上对这些内容...
    WeiHing阅读 9,907评论 10 69
  • iOS代码块Block 概述 代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,B...
    smile刺客阅读 2,375评论 2 26
  • Block使用场景,可以在两个界面的传值,也可以对代码封装作为参数的传递等。用过GCD就知道Block的精妙之处。...
    Coder_JMicheal阅读 740评论 2 1
  • 摘要 Blocks是C语言的扩充功能, iOS 4中引入了这个新功能“Blocks”,那么block到底是什么东西...
    CholMay阅读 1,193评论 2 10