zoukankan      html  css  js  c++  java
  • oc61--block

    //
    //  main.m
    //  Block基本使用:一种数据类型,应用在动画,多线程,集合遍历,网络请求回调。
    //  用来保存一段代码,在恰当的时候拿出来调用。功能类似于函数。函数不能嵌套定义,block可以,
    //  函数指针和block是一样的,相当于代码指针。
    
    #import <Foundation/Foundation.h>
    
    
    void printRose(int num)
    {
        for (int i = 0; i < num; ++i) {
            
            printf("  {@} 
    ");
            printf("   |  
    ");
            printf("  \|/ 
    ");
            printf("   | 
    ");
        }
    }
    
    int sum(int value1, int value2)
    {
        return value1 + value2;
    }
    int main(int argc, const char * argv[]) {
    
        //printRose();
        // void代表指向的函数没有返回值
        // ()代表指向的函数没有形参
        // (*roseP)代表roseP是一个指向函数的指针
    //    void (*roseP) ();
    //    roseP = printRose;
    //    roseP();
        
        // 定义一个block变量,
        // block和函数一样,可以没有返回值,也没有形参,也可以没有返回值有形参,也可以有返回值没有形参,也可以有返回值有形参
        // 所以, 在定义一个block变量的时候, 也需要告诉该变量将来保存的代码有没有返回值和形参
        
        // void代表block将来保存的代码没有返回值
        // ()代表block将来保存的代码没有形参
        // (^roseBlock) 代表reseBlock是一个block变量, 可以用于保存一段block代码,把*换成^,
        
        void (^roseBlock) ();
        // 如果block没有参数, 那么^后面的()可以省略
        roseBlock = ^(){
            printf("  {@} 
    ");
            printf("   |  
    ");
            printf("  \|/ 
    ");
            printf("   | 
    ");
        };
        // 要想执行block保存的代码, 必须调用block才会执行
        roseBlock();
        roseBlock();
        
        
        printRose(10);
        
        void (*roseP)(int);
        roseP = printRose;
        roseP(3);
        
        
        void (^roseBlock1) (int);
        roseBlock1 = ^(int num){
            for (int i = 0; i < num; ++i) {
                
                printf("  {@} 
    ");
                printf("   |  
    ");
                printf("  \|/ 
    ");
                printf("   | 
    ");
            }
        
        };
        roseBlock1(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));
        
        
        // block是一种数据类型
        
        int (^printBlock)(int)= ^int (int num){
            for (int i=0; i<num; ++i) {
                printf("--------
    ");
            }
            return 1;
        };
        printBlock(2);
        
        
        
        
        int a = 10;
        int b;
        b = 20;
        return 0;
    }
    //
    //  main.m
    //  Block和typedef
    //
    
    #import <Foundation/Foundation.h>
    
    int sum(int value1, int value2)
    {
        return value1 + value2;
    }
    
    int minus(int value1, int value2)
    {
        return value1 - value2;
    }
    
    typedef int (*calculte)(int, int);
    
    // 注意: 利用typedef给block起别名, 和指向函数的指针一样, block变量的名称就是别名
    typedef int (^calculteBlock)(int , int);
    
    
    int main(int argc, const char * argv[]) {
    
        
        int (*sumP)(int, int);
        sumP = sum;
        
        calculte sumP1 = sum;
        NSLog(@"sum = %i", sumP1(20, 10));
        
        
        int (*minusP)(int, int);
        minusP = minus;
        
        calculte minusP1 = minus;
        NSLog(@"minus = %i", minusP1(20, 10));
        
        
        int (^sumBlock)(int , int );
        
        calculteBlock sumBlock1 = ^(int value1, int value2){
            return value1 + value2;
        };
        NSLog(@"sum = %i", sumBlock1(20, 10));
        
        
        int (^minusBlock)(int , int);
        
        calculteBlock minusBlock1 = ^(int value1, int value2){
            return value1 - value2;
        };
        NSLog(@"minus = %i", minusBlock1(20, 10));
        
        return 0;
    }
  • 相关阅读:
    word查找与替换
    细说ASP.NET Windows身份认证
    防钓鱼代码
    sql触发器
    url地址栏参数
    sql递归查询
    认识TWICImage类
    尝试发个贴
    泛型单元
    [学习官方例子]TArray
  • 原文地址:https://www.cnblogs.com/yaowen/p/7436372.html
Copyright © 2011-2022 走看看