zoukankan      html  css  js  c++  java
  • Block(简单介绍)

     1 #import "ViewController.h"
     2 
     3 int age = 18;
     4 typedef int(^MaxBlock)(int,int);
     5 @interface ViewController ()
     6 
     7 @end
     8 
     9 @implementation ViewController
    10 
    11 - (void)viewDidLoad {
    12     [super viewDidLoad];
    13     // Do any additional setup after loading the view, typically from a nib.
    14 #pragma mark - Block的定义
    15     //block的实质是匿名函数
    16     //block的定义分为三个部分:1.返回值类型 2.参数列表 3block的实体部分{}
    17     /*
    18      ^返回值类型(参数列表:参数类型,参数名){
    19           如果有返回值,使用return 返回值
    20      };
    21      */
    22     
    23     //定义一个简单的block实现输出一句话
    24 //    ^void(){
    25 //        NSLog(@"今天你吃饭了吗?");
    26 //
    27 //    };
    28 //    //定义一个简单的block返回两个整数的和
    29 //    ^int(int a, int b){
    30 //        return a + b;
    31 //    };
    32 //    //定义一个block返回两个数的最大值
    33 //    ^int(int x, int y){
    34 //        return x > y ? x : y;
    35 //    };
    36     
    37 #pragma mark - block的使用
    38     
    39     //Block的实质是匿名函数,不能像函数一样调用函数名,故引入了Block变量
    40     //定义的Block变量必须和Block的定义部分返回值类型保持一致
    41 //    void(^SayHi)() = ^void(){
    42 //        NSLog(@"今天你吃饭了吗?");
    43 //    };
    44 //    SayHi();
    45 //    
    46 //    int(^Sum)(int,int) = ^int(int x, int y){
    47 //        return x + y;
    48 //    };
    49 //    NSLog(@"%d",Sum(3,5));
    50 //    
    51 //    int(^MaxValue)(int, int) = ^int(int x, int y){
    52 //        return x > y ? x : y;
    53 //    };
    54 //    NSLog(@"%d",MaxValue(2,9));
    55     
    56     //Block的定义部分可以省略返回值,如果没有参数的情况下()可以省略
    57     
    58 #pragma mark - Block的重定义typedef
    59 //    MaxBlock max = ^int(int x, int y){
    60 //        return x > y ? x : y;
    61 //    };
    62 //    NSLog(@"%d",max(3,8));
    63 #pragma makr - Block与变量
    64     //2.Block与在Block块外部定义的局部变量之间的关系:在Block块中可以访问该局部变量,但是不能修改
    65     int count = 8;
    66     
    67     //3.Block与使用__block修饰的局部变量之间的关系:可以修改可以访问
    68     __block int num = 5;
    69     
    70     //4.Block与static修饰的静态变量之间的关系:可以访问可以修改
    71     static int number = 50;
    72     //5.Block与全局变量之间的关系:可以访问和修改;
    73     MaxBlock max = ^(int x, int y){
    74         
    75         //1.Block与其内部的参数局部变量之间的关系:在Block内部可以修改和访问这些局部变量
    76      return x > y ? x : y;
    77         NSLog(@"%d",count);
    78     };
    79     
    80    #pragma mark - Block的内存
    81     
    82     /*
    83      在 Objective-C 语言中,一共有 3 种类型的 block:
    84      
    85      _NSConcreteGlobalBlock 全局的静态 block,不会访问任何外部变量。
    86      _NSConcreteStackBlock 保存在栈中的 block,当函数返回时会被销毁。
    87      _NSConcreteMallocBlock 保存在堆中的 block,当引用计数为 0 时会被销毁。
    88      */
    89     //在Block块中没有使用任何变量:此时的Block存储在全局区
    90     void(^block)() = ^{
    91         
    92     };
    93     //打印block在哪个区
    94     NSLog(@"block = %@",block);
    95     //Block块中有__block修饰的变量的时候此时存储在堆区
    96     
    97     
    98 }
  • 相关阅读:
    Codeforces Round #171 (Div. 2)
    ACdream 1079 郭式树
    HDOJ 1517 博弈论
    ACdream 1080 面面数
    博弈论 Nim 博弈
    Codeforces Round #172 (Div. 2)
    ACdream 1084 同心树
    STL bitset
    博弈论 bash博弈
    POJ 3261 后缀数组
  • 原文地址:https://www.cnblogs.com/DevinSMR/p/5218142.html
Copyright © 2011-2022 走看看