Dear All 这次我们来学习block知识 ,废话不说 、让我们直奔主题
block也是一个指针,保存的是一段代码块在内存中的空间 (栈内存)
下面声明一个最简单的block:
/*
void 返回值 表示调用这一段代码会返回什么数据
(^block1) block1表示代码块的名(指针名),但是需要在指针名前添加"^"
(void) 参数,里面跟的是参数类型和参数名,如果有多个参数 都写在()中,但是需要用","分割
*/
void(^block1) (void) = NULL;
/*
^(void)表示的是block的参数,需要把block声明时的参数写过来
然后在"("之前添加"^",")"后添加一对"{}",
该大括号的内容就是该block的代码块内容
*/
block1 = ^(void) {
NSLog(@"-------");
};
block1();
无返回参数 和 有返回参数 的block使用
//无返回参数
void (^block2) (int a, int b) = ^(int a, int b) {
NSLog(@"------>%d", a + b);
};
block2(5, 6);
//返回类型为int
int (^block3) (int a, int b) = ^(int a, int b) {
return a + b;
};
NSLog(@"===>%d", block3(1, 2));
//再看下参数为 NSString 类型的
void (^bloak7) (NSString *text) = ^(NSString *text) {
NSLog(@"hello world! %@", text);
};
bloak7(@"小明");
NSString * (^block8) ( NSString *) = ^( NSString * text) {
return text;
};
NSLog(@"%@", block8(@"测试"));
以上的使用block都是表示某个类型的指针,使用场景多为某个方法当中,那我我们如何能将block作为一个参数传递呢 ?,接下来我们就把block定义为某一类型的指针函数。举例如下
//下面的这三种Block 就不再表示某个指针,而是表示某一类型的指针 。例如 我可以用Block1来声明 无参无返回的block指针
#import "ViewController.h"
typedef void (^Block4) (void);
typedef void (^Block5) (int a, int b);
typedef int (^Block6) (int a, int b);
再我们用关键字 typedef 定义了Block 类型后,接下来的使用就舒服多了,举例如下
Block1 block4 = ^(void) {
NSLog(@"block4....");
};
block4();
Block2 block5 = ^(int m, int n) {
NSLog(@"---==%d", m + n);
};
block5(10, 12);
Block3 block6 = ^(int a, int b) {
return a + b;
};
int n = block6(10, 1);
NSLog(@"%d", n);
是不是顿时觉着使用起来舒服多了,哈哈这仅仅是个开始,接下来的章节我们将一起学习block 更精妙的部分 Learning together is Better
[第二节 block知识学习(copy,__weak,__block)]
http://www.jianshu.com/p/75f2d854e869