美文网首页
OC语言day06-12Block基本概念

OC语言day06-12Block基本概念

作者: liyuhong165 | 来源:发表于2016-06-20 00:25 被阅读62次

pragma mark Block基本概念

pragma mark 概念

/**
 1. 什么是Block
 
 Block 是iOS中的一种比较特殊的数据类型
 Block 是苹果官方特别推荐使用的数据类型,应该场景比较广泛
 
 动画
 多线程
 集合遍历
 网络请求
 
 Block的作用
 用来保存某一段代码, 可以在恰当的时间再取出来调用
 功能 类似 函数 和 方法
 
 */

/**
 2.block的格式
 Block的定义
 
 返回值类型(^block变量名)(形参列表) = ^ (形参列表){
 };
 */

/**
 3.
 指向函数的指针
 返回值 (*函数名)(形参) : *说明了到时候这个函数 是指向一个函数的指针
 void (*roseP) ();
// void 代表指向的函数 没有返回值
//  () 代表 指向的函数 没有形参
//  (*roseP) 代表roseP 是一个 指向函数的指针
 */

pragma mark 代码

#import <Foundation/Foundation.h>
#pragma mark 类

#pragma 打印一个或者多个🌹的函数
void printRose() // 打印🌹
{
    printf("   {@}  \n");
    printf("    | \n");
    printf("   \\|/ \n");
    printf("    | \n");
}
void printRoses(int num) // 打印多个🌹
{
    
    for (int i = 0; i < num; i++) {
        printf("   {@}  \n");
        printf("    | \n");
        printf("   \\|/ \n");
        printf("    | \n");
    }
}

#pragma mark 计算两个数的和 返回和 的函数
int sum (int value1 , int value2)
{
    return value1 + value2;
}
#pragma mark main函数
int main(int argc, const char * argv[])
{
    
//    printRose();
    
#warning  指向 函数的 指针
    /**
     *  void 代表指向的函数 没有返回值
     * () 代表 指向的函数 没有形参
     * (*roseP) 代表roseP 是一个 指向函数的指针
     */
//    void (*roseP) ();
//    // 指针 指向了函数
//    roseP = printRose;
//    // 直接调用指针
//    roseP();
    
#warning 1.Block基本概念
    // 定义一个Block变量,
    // block和函数一样,
    // 可以没有返回值,也没有形参    练习3
    // 也可以 没有返回值 有形参    练习1
    // 也可以 有返回值   没有形参  练习4
    // 也可以 有返回值   有形参   练习2
    // 所以, 在定义一个block变量的时候, 也需要告诉 该变量将来保存的代码 有没有返回值和形参
    
   
    //  void 代表block将来保存的代码 没有返回值 \
        ()代表block将来保存的代码    没有形参 \
        (^roseBlock) 代表roseBlock 是一个block变量, 可以用于保存 一段block代码
    
    
#warning 2.Block变量
    void (^roseBlock) ();
    /**
     block 其实跟基本数据类型定义变量 差不多
     例如:
     基本数据类型
     int a = 10;
     int 是 基本数据类型
     
     a 是变量   相当于 void (^roseBlock) ();
     10 是值    相当于
     roseBlock = ^{
     printf("   {@}  \n");
     printf("    | \n");
     printf("   \\|/ \n");
     printf("    | \n");
     };
     
     */
#warning 3.Block类型的值
    // roseBlock 变量 后面要添加;
    // {} 这个 代码段 只能保存 block的代码段 需要在代码段前面添加一个 ^
    // ^() 其中 ()代表的是参数列表 如果没有参数可以不写
    roseBlock = ^(){
        printf("   {@}  \n");
        printf("    | \n");
        printf("   \\|/ \n");
        printf("    | \n");
    };
#warning 4.调用Block
    // 要想执行block保存的代码,必须调用block才会执行
//    roseBlock();

#pragma mark 1.练习 (没有返回值 和 带有参数 的Block)

#warning 使用 指向函数的指针 打印多个🌹 [带有参数的 指向函数的指针]
    /** 打印多个🌹*/
//    printRoses(10);
    // 指向 函数的 指针
//    void (*roseP)(int);
//    roseP = printRoses;
//    roseP(2);
    
#warning 使用 Block 打印多个🌹 [带有参数的 Block]
    // 定义一个Block 变量 (类型 [类型的名称可以不要])
    void (^roseBlocks) (int);
    
    // block保存代码 使用代码块保存起来 {}
    // 需要代码块 知道是一个 block 则 代码块前面需要添加一个尖括号 ^(类型 类型名称){}
    roseBlocks = ^(int num){
        for (int i = 0; i < num; i++) {
            printf("   {@}  \n");
            printf("    | \n");
            printf("   \\|/ \n");
            printf("    | \n");
        }
    };
//    roseBlocks(2);
    
    
#pragma mark 2.练习 (有返回值 和 带有参数 的Block)
#warning 指向函数的指针 打印两个数的和 (函数带有返回值、形参)
    // 指向函数的指针(带有返回值、带有形参)
    int (*sumP)(int, int);
    sumP = sum;
//    NSLog(@"sum = %i",sumP(20,35));
    
#warning Block 打印两个数的和 (代码块带有返回值、形参)
    int (^sumBlock) (int,int);
    
    sumBlock = ^(int value1, int value2){
        return value1 + value2;
    };
    
//    int a =  sumBlock(22,22);
//    NSLog(@"sum = %i",a);
    
//    NSLog(@"sum = %i",sumBlock(22,22));
    
#pragma mark 3.练习 (没有返回值 和 没有参数 的Block)
#pragma mark 4.练习 (有返回值  和 没有参数 的Block)

#pragma mark 其他
#warning 1.Block的初始化方式-1 (先定义 再 初始化)
    // block 是一种数据类型
    void (^printLineBlock)(int);
    printLineBlock = ^(int num){
        for (int i = 0; i < num; ++i) {
            printf("----------\n");
        }
    };
    printLineBlock(2);
    
#warning 1.Block的初始化方式-2 (定义的同时初始化)
    
    void (^printLineBlock2)(int)= ^(int num){
        for (int i = 0; i < num; ++i) {
            printf("-----👍-----\n");
        }
    };
    printLineBlock2(3);
    
#warning 2.Block的形参 可以带有返回值类型 (一般情况都不会写)
    /**
    
     int(返回值类型) (^printLineBlock3)(int)= ^int(形参列表:返回值类型) (int num)

     */
    int (^printLineBlock3)(int)= ^int (int num){
        for (int i = 0; i < num; ++i) {
            printf("-----👍-----\n");
        }
        return 1;// 返回值
    };
    printLineBlock3(3);
    
    /**
     基本数据类型
     两种初始化方式
     1.定义的同时初始化
     int a = 10;
     2. 先定义 再 初始化
     int b;
     b = 30;
     */
    
    return 0;
}

相关文章

  • OC语言day06-12Block基本概念

    pragma mark Block基本概念 pragma mark 概念 pragma mark 代码

  • OC语言基本概念

    基本概念 oc面向对象语言,只需关注具有相关功能的对象,不必亲力亲为。 oc面向对象的三大特性:封装、继承(拷贝一...

  • 07-OC中Runtime方法缓存

    OC中Runtime的基本概念: Runtime是OC中的运行时机制,之所以说OC是一门动态性语言,这也正是因为有...

  • Runtime学习

    rutime基本概念 runtime是什么 runtime是属于OC的底层,是一套比较底层的纯C语言API, 属于...

  • Runtime(一)初识

    基本概念 runtime是属于OC的底层,是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C...

  • 总结:八天学会OC语言(上)

    day1 OC语言day01-01OC的简介(附C语言知识点回顾)OC语言day01-02C和OC的对比OC语言d...

  • 1.6 继承

    本小节知识点: 继承基本概念 OC中的继承关系 OC中如何实现继承 1.继承基本概念 现实生活中的继承 交通工具类...

  • 编写高质量iOS与OS X代码的52个有效方法(一)

    这本书没有OC语言的基础知识,讲的是如何高效运用这门语言 第一章 熟悉OC 1、什么是OC ·OC是为C语言添加了...

  • iOS 开发之八天学会 OC 语言

    八天学会 OC 语言(上)八天学会 OC 语言(下)

  • Objective-C概述

    OC概述 • Objective-C简称OC,OC是C语言的扩充,并且OC是iOS和OS X操作系统的编程语言...

网友评论

      本文标题:OC语言day06-12Block基本概念

      本文链接:https://www.haomeiwen.com/subject/edabdttx.html