Block的基本使用以及与函数的区别
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 Function-----------!2014-03-21 11:22:04.570 Block Block--------------!2014-03-21 11:22:04.570 Block 函数调用结果:s1 = 72014-03-21 11:22:04.571 Block Block调用结果:s2 = 7Program ended with exit code: 0
页:
[1]