美文网首页
Block 代码块 / 闭包

Block 代码块 / 闭包

作者: zcz19911 | 来源:发表于2018-07-19 14:39 被阅读0次

Block是用来封装和保存代码,有点像函数,Block可以在任何时候执行,效率高。

根据Block在内存中的位置分为三种类型:

1、NSGlobalBlock:全局block,没有引用外部变量。如:

int a = 10;

void (^block)() = ^{

    NSLog(@"block");

};

block();

2、NSStackBlock:栈block,引用外部变量, 当函数返回时block将无效。

int a = 10;

void (^block)() = ^{

    NSLog(@"block %@", a);

};

block();

3、NSMallocBlock:堆block,对栈block进行copy,该办block就会从栈区复制到堆区,当函数返回时block依然有效。

block的用法:

1、作为属性。

比如:在Person类的.h文件定义属性:

@property (nonatomic, copy) void (^eat)();

使用时:

Person *p = [[Person alloc] init];

p.eat = ^(){

    NSLog(@"eat");

}

2、作为方法的参数(函数式编程)

比如:在Person类的.h文件定义:

- (void)eat:(void(^)())block;

使用:

Person *p = [[Person alloc] init];

[p eat:^{

    NSLog(@"eat");

}];

3、作为方法的返回值(链式编程)

如:Person类的.h文件定义:

- (Person *(^)(int m))run;

.m文件实现方法:

- (Person *(^)(int m))run {

    return ^(int m) {

        NSLog(@"跑了%@米", m);

        return self;

    };

}

使用:

Person *p = [[Person alloc] init];

p.run(200).run(300).run(400);

函数式编程:订阅代码与业务逻辑代码放一起。如AFN框架,网络请求的代码和得到请求结果的代码放一起。

响应式编程:当所有条件满足时就触发。如KVO,代理,通知都是响应式编程。

链式编程:简单理解就是通过连续“.”语法调用方法,方法返回的对象是方法本身。如Masonry框架。

(RAC,ReactiveCocoa框架,是函数响应式编程。)

相关文章

  • Swift 闭包

    闭包 闭包是保存一段代码块,可以在代码中传递和是使用(类似Block) 闭包和block类似 闭包的表达式如下闭包...

  • Swift3.x 之闭包 ◉•⦿

    ◎ 闭包 闭包: 自包含的函数代码块,可以再代码中被传递和使用. 闭包和OC中的block非常相似 • ...

  • Swift3.x - 闭包

    闭包的介绍闭包是自包含的函数代码块、可以在代码中被传递和使用。Swift中的闭包与C和OC中的代码块(Block)...

  • Swift 3.0之闭包(Closures)入门和OC bloc

    闭包是自包含的函数代码块,可以在代码中被传递和使用.(参考OC中的Block) 一. 定义闭包或者block 1....

  • swift语法--12-1闭包基本概念

    swift语法--12-1闭包基本概念 block和闭包区别 OC:block类似于匿名函数, 用于封装代码块, ...

  • Block 代码块 / 闭包

    Block是用来封装和保存代码,有点像函数,Block可以在任何时候执行,效率高。 根据Block在内存中的位置分...

  • swift-闭包

    闭包是自包含的代码块,可以在代码中被传递和使用。Swift中的闭包与C和Objective-C中代码块(block...

  • swift 闭包(闭包表达式、尾随闭包、逃逸闭包、自动闭包)

    闭包是自含的函数代码块,可以在代码中被传递和使用 闭包和swift的对比 Swift 中闭包与OC的 block ...

  • 10/27函数和闭包(closures)

    闭包是自包含的函数代码块,可以在代码中被传递和使用,类似于 block

  • Swift闭包循环引用

    闭包循环引用 block 闭包和block很像,都是提前准备好代码 block会对外部变量进行强引用,保证执行代码...

网友评论

      本文标题:Block 代码块 / 闭包

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