美文网首页
Block块使用

Block块使用

作者: smile丽语 | 来源:发表于2015-10-25 15:01 被阅读126次

block

// 基本用法一:1.定义无参数无返回值的Block代码块

// void:无返回值 ():无参数

void (^printBlock)() = ^() {

NSLog(@"这是无参数无返回值的Block块");

};

// 调用该无参数无返回值的Block块

printBlock();

// 基本用法二:2.定义有参数无返回值的Block代码块

// (int):数据类型  ^(int num):有参数,且数据类型也要有

void (^printNumBlock)(int) = ^(int num) {

NSLog(@"这是有参数无返回值的Block块, 传入的参数是:%d", num);

};

// 调用该有参数无返回值的Block块

printNumBlock(10);

// 基本用法三:3.定义有参数有返回值的Block代码块

// int:有返回值,返回数据类型为int的值,⚠️不要加括号

// ^(int num):有参数,且数据类型也要有

int (^printCountBlock) (int) = ^(int num) {

NSLog(@"这是有参数有返回值的Block块,传入的参数是:%d", num);

return num * 9;

};

// 调用该有参数有返回值的Block块

int consequence = printCountBlock(8);

NSLog(@"这是有参数有返回值的Block块,返回的值是:%d", consequence);

为什么用block? 和函数有很多相似之处,但是绝对绝对不是函数。

^{

语句体;

};

PS: // myblock是block类型的变量

void (^myblock)() = ^{

NSLog(@"Hello, World!");

};

// 调用myblock函数

myblock();

函数是不允许嵌套定义的,也就是不允许在函数的定义里再去定义一个函数。

block可以在函数的定义里定义。

int(^mathBlock)(int x,int y);  mathBlock 是block类型的变量

typedef  int(^mathBlock)(int x,int y);  而现在mathBlock类型的别名是.block类型 int(^)(int x,int y);

typedef 的使用

1.int count;  count是整形类型的变量

2.typedef int count;  count是整形类型的别名。

3.count i; 那么i就是count类型的,也就是int类型的。

1.int(*math_t)(int, int);

math_t是什么? 是指向指针类型的变量 ,存放的是地址。函数的名字就是函数的入口地址.

2. typedef int(*math_t)(int, int);

3. math_t mt; mt是什么?变量。指针类型的变量。访问这个变量内容里的内容的时候,访问方式是函数类型。

PS: // 第二个有参block的使用

// typedef的使用 此时mathBlock类型的别名是.block类型 int(^)(int x,int y);

typedef int(^mathBlock)(int x,int y);

mathBlock mt;

mt = ^(int x, int y){

return x + y;

};

// 调用有参mathBlock函数

int result = mt(3, 5);

NSLog(@"result = x+y = %d", result);

block语句块可以访问可以访问block外局部变量,但是只能读取不能写; 如果想写入,需要在变量声明的前边加上__block声明。

int var_a = 20;

__block int var_b = 30;

block可以作为返回值类型

在主函数里: // 第三种

int a = 3; int b = 5;

int result2;

int mta;

TRMath *t = [[TRMath alloc] init];

// 调用process方法

mta = [t process:^int(int x, int y) {

return x + y;

} withInt:b otherInt:a];

result2 = [t process:^int(int x, int y) {

return x - y;

} withInt:b otherInt:a];

NSLog(@"a + b = %d", mta);

NSLog(@"b - a = %d", result2);

// 第四种

TRPerson *tp = [[TRPerson alloc] init];

// 调用getBlock方法

TRBlock bloc = [tp getBlock];

bloc();

相关文章

  • iOS block的使用

    block的使用 Block 又称为“块” 或 “代码块”,作用是用来保存代码。block基本格式: 1、使用ty...

  • Block块使用

    一、Block的简单介绍 Block 就是匿名函数 它是封装了一个代码块,这个代码块在什么时候都可以执行; 使用B...

  • Block块使用

    block // 基本用法一:1.定义无参数无返回值的Block代码块 // void:无返回值 ():无参数 v...

  • Block(Closure) Tips

    使用 Block 的时候谨记以下几点:1.Block类型:全局块(Global Block)和堆块(Heap Bl...

  • ios的block原理

    block:代码块,函数指针和指针 block:使用copy关键字 堆block:@propetry 栈block...

  • Block(互相持有) 内Strong强引用 释放

    Block 作为块语法 使用 __weak __strong

  • iOS Block的使用

    一 .最简单的block使用 使用block的三个步骤: 1.定义block变量2.创建block代码块3.调用b...

  • iOS技术总结(Block)[整理]

    摘要: . Block代码块结构及几种类型. __block使用.使用block在两个界面中传值问题 官方文档:苹...

  • block系列3-- __block变量

    1.__block修饰自动变量 (1)block块内使用自动变量 如我们所知,我们在block中使用的自动变量是捕...

  • block 循环引用

    block循环引用原因:一个对象A有Block类型的属性,从而持有这个block,如果block的代码块中使用到这...

网友评论

      本文标题:Block块使用

      本文链接:https://www.haomeiwen.com/subject/fyfxhttx.html