美文网首页
iOS--Block块

iOS--Block块

作者: 空白Null | 来源:发表于2016-07-07 16:00 被阅读43次

一、block的应用场景

1、对象与对象之间的通信方式

1)代理-协议,1对1

2)通知,1对多

3)block,1对1,但不需要协议

2、block介绍

block是iOS4.0之后新增的一种语法结构,也称为闭包,block是一个匿名的函数代码块,此代码块可以作为参数传递给其他对象

PS:每一个block都是一个可以有参数和返回值的方法

二、block的使用

1、简单使用

1)block变量的声明,类似声明一个普通对象

返回值  block变量    参数

int  (^ myBlocks)(int a);

2)block的创建,类似将一个对象给实例化

myBlocks= ^(int a){

int result = a * a;

return result;

};

3)block的调用,类似使用对象

int ret = myBlocks(10);

2、上一种方式每次我要使用一个block变量都需要声明否则会直接将之前的覆盖掉,为了方法我们可以定义一种blcok类型,用这种block类型来声明多个类似的block变量

1) 定义block类型

typedef int (^MyBlock)(int a);

2) 创建block对象

MyBlock myBlock = ^(int a){

int result = a * a;

return result;

};

3)  block的调用

int ret = myBlocks(10);

三、block作为参数

之前我们都是将字符串、字典、数组等作为参数传递,没有过将某一个方法做为参数传递,今天就通过block将参数传进来

1) 定义block类型

typedef int (^MyBlock)(int a);

2) 在延展中声明一个方法,该方法有一个block参数

- (void)objectMethod:(MyBlock)myblock

3) 在类中实现这个方法

- (void)testBlock:(MyBlock)myBlock {

//让执行传进来的代码块

myBlock(10);

}

4) 在viewDidLoad中调用这个方法

1、第一种方式

MyBlock block = ^(int a){

return a;

};

[self testBlock:block];

2、第二种方式

[self testBlock:^int(int a) {

return a;

}];

三、blocks和变量

变量按作用域分有全局变量和局部变量,block代码块内可以引用这两种变量,但是有不同的管理机制

1、引用局部变量

block引用局部变量时,该变量会作为常量编码到block块中。局部变量需要使用__block修饰,才能在block块中修改。

int number = 10;

MyBlock testBlock= ^(int a){

number = 20; //错误不能重新赋值

NSLog(@"%d",number);

};

将int number = 10,改为__block int number = 10,便可重新赋值

2、全局变量的话可以直接在block中赋值

相关文章

  • iOS--Block块

    一、block的应用场景 1、对象与对象之间的通信方式 1)代理-协议,1对1 2)通知,1对多 3)block,...

  • iOS--Block

    假设我们熟悉代理递值的话,对代理我们可能又爱有恨!我们先建立模型A页面 push B页面,如果把A页面的值传递到B...

  • iOS--Block

    先定个小目标,例如整理一篇关于 block 的笔记 先用 OC 写一段最简单的 block 代码:int main...

  • iOS--Block

    Block都继承自NSBlock,并最终继承与NSObject,所以Block有 isa 指针,本质是一个封装了函...

  • (二)iOS--Block浅谈,循环引用

    前面我们说了weak和strong的一些作用,自然我们接下来就要聊一下block。Block在我们项目中绝对会用到...

  • iOS--block的本质和变量捕获机制

    学习笔记,如有错误,欢迎批评指正!!! 仅供学习交流... block的本质 block是带有自动变量(局部变量)...

  • iOS--block的4种使用情况

    1. block帮你保存一份代码,等到恰当的时候调用 2.保存在对象中,恰当的时候才去调用 3.把block当做...

  • 栈块 堆块 全局块

    编译器会给if 和 else 两个范围内的block 分配栈内存, 但是只要出了这个范围之后, 栈内存有可能被覆写...

  • 栈块、堆块、全局块

    编译器版本为Clang5,主要技术是ARC,参考来自Objective-C Automatic Reference...

  • 全局块、栈块及堆块

    栈块 void (^block)(); if(){ block = ^(){ NSLog(@"block a"...

网友评论

      本文标题:iOS--Block块

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