第一节 block基础知识学习

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

你可能感兴趣的:(第一节 block基础知识学习)