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(@"---------");
};
代码参考:- //
- // main.m
- // Block
- //
- // Created by yusian on 14-3-20.
- // Copyright (c) 2014年 小龙虾论坛. All rights reserved.
- //
- #import <Foundation/Foundation.h>
- // 定义一个"返回值为空,无形参"类型的函数指针类型:Myfun
- typedef int (*Myfun)(int, int);
- // 定义一个"返回值为空,无形参"类型的block指针类型:Myblock
- typedef int (^Myblock)(int, int);
- void test();
- int sum(int n1, int n2);
- int main()
- {
-
- /******************************************************/
- // 定义一个无返回值无形参的block类型数据b;
- void (^block)();
-
- // 给b赋值
- block = ^() {
- NSLog(@"Block--------------!");
- };
-
- /**********************************
- 以上两句可以合成一句
- void (^b)() = ^(){
- NSLog(@"Block--------------!");
- };
-
- 无形参还可以简写为
- void (^b)() = ^ {
- NSLog(@"Block--------------!");
- };
- **********************************/
-
- /******************************************************/
-
- // 调用函数test
- test();
-
- // 调用block b
- block();
-
- /******************************************************/
-
- // 定义一个Myfun类型的变量f并赋值,Myfun类型实际上为函数指针,上面有typedef定义
- Myfun f = sum;
-
- // 使用f进行传参即为调用sum函数,将返回值传给int变量s
- int s1 = f(3, 4);
- // 输出结果
- NSLog(@"函数调用结果:s1 = %d", s1);
-
- // 对比函数指针,同样将一个^ (int, int)赋值给Myblock类型变量b,Myblock类型上面有typedef定义
- Myblock b = ^ (int n1, int n2) {
- return n1 + n2;
- };
-
- // 使用b进行传参即为调用上述block,将返回值传给int变量s1
- int s2 = b(3, 4);
-
- // 输出结果
- NSLog(@"Block调用结果:s2 = %d", s2);
-
- return 0;
- }
- // 定义一个无返回值无形参的函数test
- void test()
- {
- NSLog(@"Function-----------!");
- }
- // 定义一个返回值为int类型,带两个int型形参的函数sum
- int sum(int n1, int n2)
- {
- return n1 + n2;
- }
复制代码 运行结果: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
|