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

  • 相关阅读:
    HDU 5059 Help him
    HDU 5058 So easy
    HDU 5056 Boring count
    HDU 5055 Bob and math problem
    HDU 5054 Alice and Bob
    HDU 5019 Revenge of GCD
    HDU 5018 Revenge of Fibonacci
    HDU 1556 Color the ball
    CodeForces 702D Road to Post Office
    CodeForces 702C Cellular Network
  • 原文地址:https://www.cnblogs.com/wangshuo1/p/IOS-12.html
Copyright © 2011-2022 走看看