zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    算法第五章作业
    第四章实验报告
    算法第三章作业
    算法第三章上机实验报告
    算法第二章作业
    算法第二章上机实践报告
    算法 代码规范(C++)&《数学之美》读后感
    第七章学习小结
    第六章学习小结
    第五章学习小结
  • 原文地址:https://www.cnblogs.com/wangshuo1/p/IOS-12.html
Copyright © 2011-2022 走看看