年年有"余"

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2843|回复: 0

Block的基本使用以及与函数的区别

[复制链接]
  • TA的每日心情

    2024-10-15 10:05
  • 签到天数: 372 天

    [LV.9]以坛为家II

    发表于 2014-3-21 11:45:38 | 显示全部楼层 |阅读模式
    1、定义Block变量:返回值类型 (^变量名称) (形参...);
            void (^b)( );
    2、定义Block代码块:^(形参...)  {   block体(代码块)   };
         带形参的:
            ^(int n1, intn2) {
                    return n1 + n2;
            };


         不带形参的:
            ^( ) {
                    NSLog(@"--------");
            };


         无形参括号可省略
            ^ {
                    NSLog(@"--------");
            };

    3、typedef重定义Block类型:返回值类型 (^新类型名) (形参...),与定义函数指针非常类似:返回值类型 (*指针变量) (形参...),返回值类型、形参的个数与类型决定了该Block类型能够定义何种类型的Block变量,函数指针也一样,返回值类型、形参的个数与类型决定了该指针能够指向何种类型的函数;
            typede void(^Myblock) ( );
            Myblock b = ^{
                    NSLog(@"---------");
            };


    代码参考:
    1. //
    2. //  main.m
    3. //  Block
    4. //
    5. //  Created by yusian on 14-3-20.
    6. //  Copyright (c) 2014年 小龙虾论坛. All rights reserved.
    7. //
    8. #import <Foundation/Foundation.h>
    9. // 定义一个"返回值为空,无形参"类型的函数指针类型:Myfun
    10. typedef int (*Myfun)(int, int);
    11. // 定义一个"返回值为空,无形参"类型的block指针类型:Myblock
    12. typedef int (^Myblock)(int, int);
    13. void test();
    14. int sum(int n1, int n2);
    15. int main()
    16. {
    17.    
    18. /******************************************************/
    19.     // 定义一个无返回值无形参的block类型数据b;
    20.     void (^block)();
    21.    
    22.     // 给b赋值
    23.     block = ^() {
    24.         NSLog(@"Block--------------!");
    25.     };
    26.    
    27.     /**********************************
    28.      以上两句可以合成一句
    29.      void (^b)() = ^(){
    30.         NSLog(@"Block--------------!");
    31.      };
    32.      
    33.      无形参还可以简写为
    34.      void (^b)() = ^ {
    35.         NSLog(@"Block--------------!");
    36.      };
    37.      **********************************/
    38.    
    39. /******************************************************/
    40.    
    41.     // 调用函数test
    42.     test();
    43.    
    44.     // 调用block b
    45.     block();
    46.    
    47. /******************************************************/
    48.    
    49.     // 定义一个Myfun类型的变量f并赋值,Myfun类型实际上为函数指针,上面有typedef定义
    50.     Myfun f = sum;
    51.    
    52.     // 使用f进行传参即为调用sum函数,将返回值传给int变量s
    53.     int s1 = f(3, 4);
    54.     // 输出结果
    55.     NSLog(@"函数调用结果:s1 = %d", s1);
    56.    
    57.     // 对比函数指针,同样将一个^ (int, int)赋值给Myblock类型变量b,Myblock类型上面有typedef定义
    58.     Myblock b = ^ (int n1, int n2) {
    59.         return n1 + n2;
    60.     };
    61.    
    62.     // 使用b进行传参即为调用上述block,将返回值传给int变量s1
    63.     int s2 = b(3, 4);
    64.    
    65.     // 输出结果
    66.     NSLog(@"Block调用结果:s2 = %d", s2);
    67.    
    68.     return 0;
    69. }
    70. // 定义一个无返回值无形参的函数test
    71. void test()
    72. {
    73.     NSLog(@"Function-----------!");
    74. }
    75. // 定义一个返回值为int类型,带两个int型形参的函数sum
    76. int sum(int n1, int n2)
    77. {
    78.     return n1 + n2;
    79. }
    复制代码
    运行结果:
    2014-03-21 11:22:04.568 Block[1834:303] Function-----------!
    2014-03-21 11:22:04.570 Block[1834:303] Block--------------!
    2014-03-21 11:22:04.570 Block[1834:303] 函数调用结果:s1 = 7
    2014-03-21 11:22:04.571 Block[1834:303] Block调用结果:s2 = 7
    Program ended with exit code: 0

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|Archiver|iOS开发笔记 ( 湘ICP备14010846号 )

    GMT+8, 2024-11-22 12:34 , Processed in 0.044364 second(s), 20 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表