美文网首页
Block简单使用

Block简单使用

作者: Moker_C | 来源:发表于2017-09-30 16:50 被阅读2次

block的代码是内联的,效率高于函数调用

block对于外部变量默认是只读属性

block被Objective-C看成是对象处理

block的代码结构

举个简单例子:

int (^sumNumbers)(int a,int b) = ^(int a,int b) {

return a + b;

};

这段代码等号左侧声明一个名为sumNumbers的代码块,名称前用^符号表示后面的字符串是block的名称。最左侧的int表示这个block的返回值类型,括号中间表示这个block的参数列表,这里接收两个int类型的参数。 而在等号右侧表示这个block的定义,其中返回值是可以省略的,编译器会根据上下文自动补充返回值类型。使用^符号衔接着一个参数列表,使用括号包起来,告诉编译器这是一个block,然后使用大括号将block的代码封装起来。

block代码结构

block在捕获变量的时候只会保存变量被捕获时的状态(对象变量除外),之后即便变量再次改变,block中的值也不会发生改变

block对于外部变量是只读的,想要在block内部修改外部变量,外部变量需要加__block修饰,block在iOS开发中被视作是对象,因此其生命周期会一直等到持有者的生命周期结束了才会结束。另一方面,由于block捕获变量的机制,使得持有block的对象也可能被block持有,从而形成循环引用,导致两者都不能被释放

__weak typeof(self) weakSelf = self;

__weak__typeof(self)weakSelf=self;

__weak typeof(&*self)weakSelf=self;

__weak__typeof(&*self)weakSelf=self;

按照returnValue(^blockName)(parameters)的方式进行block的声明未免麻烦了些,我们可以通过关键字typedef来为block起类型名称,然后直接通过类型名进行block的创建:

typedef void(^TestOneBlock)(NSString *str, NSArray *arr);

typedef void(^TestTwoBlock)(NSString *str, NSArray *arr);

- (void)completeWithBlock:(TestOneBlock)block;

- (void)completeWithHandle:(TestTwoBlock)block;

@property (copy, nonatomic) TestOneBlock oneBlock;

@property (copy, nonatomic) TestTwoBlock twoBlock;

相关文章

  • ios block使用

    iOS Block的使用一 .最简单的block使用******使用block的三个步骤:1.定义block变量 ...

  • iOS Block使用注意

    block本质是两个结构体,使用block使代码简单易读。使用Block注意: 1、block内部使用外部指针,会...

  • Block简单使用

    block的代码是内联的,效率高于函数调用 block对于外部变量默认是只读属性 block被Objective-...

  • Block简单使用

    block用copy修饰block里不能改变block外面的变量,如果需要改变必须在变量前面加__block 修饰...

  • block简单使用

    一个vc需要加一个view,一个view上面有imageView,label,button等。我们把这个view独...

  • block简单使用

    1.首先在头文件(.h文件)声明一个block属性 @property (nonatomic,copy)void ...

  • Block简单使用

    //block在两个视图的传值 Apush到B B消失时将textfield的值传回A //B.h //给bloc...

  • Block - block简单的使用

    参考文档 iOS Block详解 一、忘记block格式? 样例一.png 样例二.png 二、Block的定义 ...

  • iOS Block的使用

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

  • runtime 之给 button 添加 block 事件支持

    这只是简单的笔记UIButton+block.h UIButton+block.m 使用

网友评论

      本文标题:Block简单使用

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