Block :block 实际上就是 Objective-C语言对闭包的实现

闭包(Closure):闭包就是一个函数,或者一个指向函数的指针,加上这个函数执行的非局部变量。闭包允许一个函数访问声明该函数运行上下文中的变量,甚至可以访问不同运行上文中的变量。

1 block 的原型 和 定义

  *block的 原型:

int  ( ^ sumblock ) ( int , int );

上面的代码声明了一个block(^)的原型,名字叫做 sumblock,包含两个 int 型的参数,返回值为 int类型

  *block的定义:

sumblock  =  ^ ( int parmaA, int parmaB ) {

  return 10;

};

上面的代码中,将一个函数体赋值给了 sumblock 变量,其接收一个名为 paramA 和一个名为 paramA的参数,返回一个 int 对象

注意:一定不要忘记 block 后面的分号

  *block 的使用

定义好 block 后,就可以像使用标准函数一样使用它了:

sumblock(7,7);

2 block  的重定义

  由于 block 数据类型的语法会降低整个代码的阅读性,所以常使用 typedef 来定义 block 类型。

  typedef int ( ^ sumblock ) ( int , int );

定义之后 sumblock 就是一个类 ,如 int,NSString;

说明 : 本来一般重定义是  typedef int ( ^ ) ( int , int ) sumblock; 但是 block 比较特殊,应该将新 block 变量名写在托字符 ^ 后面

3 block 内部可以访问外部变量

  默认情况下, block 内部不能修改外面的局部变量

  给局部变量加上 __block 关键字,这个局部变量就可以在 block 内部修改

4 block 传值 一般是从后(backVC)往前(foreVC)传

  *block 作为属性传值

a 传值第一步 : 声明 block 属性     (backVC)

重定义

typedef void ( ^ MyBlock ) ( NSString * paramA);  参数名可写不写

声明属性

@propertry ( copy , nonatomic ) MyBlock myBlock;

b 传值第二步 : 调用 block 函数,将传递的内容通过 block 的参数传递    (backVC)

backVC.myBlock (传递的内容作为参数传递)

c 传值第三步 :定义 myBlock , 在 block 函数体中赋值,当第二步调用时,执行函数体中的赋值操作    (foreVC)

backVC.myBlock = ^ ( NSString * paramA){

  赋值操作

}

  *block 作为参数传值

a 传值第一步 定义方法, 用 block 为其一参数 backVC

重定义

typedef void ( ^ MyBlock ) ( NSString * paramA);  参数名可写不写

声明方法

- ( void )blockWithMyBlock: ( MyBlock ) myBlock;

b 第二步 实现方法,调用 Block 函数   backVC

- ( void )blockWithMyBlock:( MyBlock ) myBlock{

  __weak typeof(self) weakSelf = self;// 防止循环引用

  myBock ( paramA );

}

c 传值第三步 foreVC

[ backVC blockWithMyBlock : ( MyBlock ) myblock =

^ void ( NSString * paramA ){

  值已经传过来了,当第二步调用 block 的时候,可以在这里使用 paramA

}];

iOS常用设计模式和机制之Block简单使用的更多相关文章

  1. iOS常用设计模式和机制之代理

    Delegate : 1 代理设计模式的使用我们首先需要明白三个要素 *委托方:委托别人去执行某些操作的人(对象) *代理方:被委托区执行某些操作的人(对象) *协议:(protocol)委托方需要代 ...

  2. iOS 常用设计模式和机制之KVO

    KVO http://blog.kyleduo.com/2014/10/20/ios_learning-kvo/ 定义: KVO:Key-Value Observing,是Foundation框架提供 ...

  3. iOS 常用设计模式和机制之 KVC

    KVC 1  key Value Coding,键值编码,是一种间接访问实例变量的方法 2  KVC 提供了一种使用字符串(key)而不是访问器方法,去访问一个对象实例变量的机制 3  KVC 常用方 ...

  4. iOS常用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)

    1. 简单工厂模式 如何理解简单工厂,工厂方法, 抽象工厂三种设计模式? 简单工厂方法包含:父类拥有共同基础接口,具体子类实现子类特殊功能,工厂类根据参数区分创建不同子类实例.该场景对应的UML图如下 ...

  5. IOS常用设计模式之委托模式

    对于iOS开发,举例Cocoa框架下的几个设计模式为大家分析.当然,Cocoa框架下关于设计模式的内容远远不止这些,我们选择了常用的几种:单例模式.委托模式.观察者模式.MVC模式. 委托模式 委托模 ...

  6. iOS常用设计模式:MVC、单例、代理、观察者。

    MVC 模型-视图-控制器(MVC)设计模式 MVC根据角色划分类,涉及到三个角色: Model:模型保存应用程序的数据. View:视图是模型的可视化表示以及用户交互的控件. Controller: ...

  7. iOS常用设计模式笔记

    一.原则 1.单一职责原则 (Single Responsiblity Principle SRP) 2.开闭原则(Open Closed Principle,OCP) 3.里氏替换原则(Liskov ...

  8. IOS开发常用设计模式

    IOS开发常用设计模式 说起设计模式,感觉自己把握不了笔头,所以单拿出iOS开发中的几种常用设计模式谈一下. 单例模式(Singleton) 概念:整个应用或系统只能有该类的一个实例 在iOS开发我们 ...

  9. iOS常用的设计模式

    iOS常用的设计模式有:单例模式.委托模式.观察者模式和MVC模式.下面分别简单介绍. 一:单例模式 我们常用的UIApplication.NSUserdefaults.NSNotificationC ...

随机推荐

  1. 第四章· ucos系统及其任务

    来自为知笔记(Wiz)

  2. C#:类和结构的区别

    第一.引用类型和值类型 类属于引用类型,而结构属于值类型. 结构在赋值时进行复制. 将结构赋值给新变量时,将复制所有数据,并且对新副本所做的任何修改不会更改原始副本的数据. 第二.继承性 类可以继承类 ...

  3. Codeforces Round #384 (Div. 2)A,B,C,D

    A. Vladik and flights time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  4. SQL SERVER建库&用户赋权限

    create database ServiceDB on primary ( name='ServiceDB_data', -- 主数据文件的逻辑名称 filename='D:\WebRoot\DB\ ...

  5. flex 4.6 移动开发 app.xml配置说明

    <?xml version="1.0" encoding="utf-8" standalone="no"?> <appli ...

  6. Spring中@Async注解实现“方法”的异步调用

    原文:http://www.cnblogs.com/zhengbin/p/6104502.html 简单介绍: Spring为任务调度与异步方法执行提供了注解支持.通过在方法上设置@Async注解,可 ...

  7. Karma Police - Radiohead

    音乐赏析似乎是一件没有意义的工作,与电影相比音乐更加抽象,不同的人对同一首歌会有完全不同的解读. 但一首歌一旦成为经典,就有解读它的必要,因为它一定诉出了一个群体的某些情绪. Karma police ...

  8. 树(一)——线段树

    问题 现在有1~30这30个数,数N被抽上的概率正比于1/sqrt(N+1),求满足这个概率分布的随机数发生器. 思路 第一,如何解决这个"概率正比"问题. 第二,如何产生满足条件 ...

  9. Swift 01.String

    1.字符串拼接 var num1 = "hello,world" var name = "xiaoming" var age = let student = n ...

  10. MATLAB 图像分类 Image Category Classification Using Bag of Features

    使用MATLAB实现图像的识别,这是MATLAB官网上面的例子,学习一下. http://cn.mathworks.com/help/vision/examples/image-category-cl ...