iOS常用设计模式和机制之Block简单使用
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简单使用的更多相关文章
- iOS常用设计模式和机制之代理
Delegate : 1 代理设计模式的使用我们首先需要明白三个要素 *委托方:委托别人去执行某些操作的人(对象) *代理方:被委托区执行某些操作的人(对象) *协议:(protocol)委托方需要代 ...
- iOS 常用设计模式和机制之KVO
KVO http://blog.kyleduo.com/2014/10/20/ios_learning-kvo/ 定义: KVO:Key-Value Observing,是Foundation框架提供 ...
- iOS 常用设计模式和机制之 KVC
KVC 1 key Value Coding,键值编码,是一种间接访问实例变量的方法 2 KVC 提供了一种使用字符串(key)而不是访问器方法,去访问一个对象实例变量的机制 3 KVC 常用方 ...
- iOS常用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)
1. 简单工厂模式 如何理解简单工厂,工厂方法, 抽象工厂三种设计模式? 简单工厂方法包含:父类拥有共同基础接口,具体子类实现子类特殊功能,工厂类根据参数区分创建不同子类实例.该场景对应的UML图如下 ...
- IOS常用设计模式之委托模式
对于iOS开发,举例Cocoa框架下的几个设计模式为大家分析.当然,Cocoa框架下关于设计模式的内容远远不止这些,我们选择了常用的几种:单例模式.委托模式.观察者模式.MVC模式. 委托模式 委托模 ...
- iOS常用设计模式:MVC、单例、代理、观察者。
MVC 模型-视图-控制器(MVC)设计模式 MVC根据角色划分类,涉及到三个角色: Model:模型保存应用程序的数据. View:视图是模型的可视化表示以及用户交互的控件. Controller: ...
- iOS常用设计模式笔记
一.原则 1.单一职责原则 (Single Responsiblity Principle SRP) 2.开闭原则(Open Closed Principle,OCP) 3.里氏替换原则(Liskov ...
- IOS开发常用设计模式
IOS开发常用设计模式 说起设计模式,感觉自己把握不了笔头,所以单拿出iOS开发中的几种常用设计模式谈一下. 单例模式(Singleton) 概念:整个应用或系统只能有该类的一个实例 在iOS开发我们 ...
- iOS常用的设计模式
iOS常用的设计模式有:单例模式.委托模式.观察者模式和MVC模式.下面分别简单介绍. 一:单例模式 我们常用的UIApplication.NSUserdefaults.NSNotificationC ...
随机推荐
- PLS-00221: 'function' 不是过程或尚未定义
直接调用addOrgunitInfoByBatch(r_user_batch.seq_id,'01'); 报错PLS-00221: 'function' 不是过程或尚未定义 原因是在调用函数时 ...
- hdu2457DNA repair(ac自动机+dp)
链接 从开始节点往下走,不能走到病毒节点,如果当前状态与原始串不一样就+1,取一个最小值. #include <iostream> #include<cstdio> #incl ...
- Java注释@Override
@Override指定方法覆载.它可以强制一个子类必须覆盖父类的方法. package ch14; /** * Created by Jiqing on 2016/12/27. */ public c ...
- std::vector介绍
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vec ...
- HTML5 十大新特性(一)——语义标签
说语义标签前先来理解下什么叫语义化,当下html是靠div+css来铸造页面的整体框架和结构的,通篇大量的div可读性极低,因此诞生了这些特殊的标签,简单地说就是见名知义,使页面更清晰,方便维护和开发 ...
- TestLink
TestLink的主要功能包括: 测试需求管理 测试用例管理 测试用例对测试需求的覆盖管理 测试计划的制定 测试用例的执行 大量测试数据的度量和统计功能 TestLink的主要特色包括: 支持多产品或 ...
- SPSS数据分析—混合线性模型
之前介绍过的基于线性模型的方差分析,虽然扩展了方差分析的领域,但是并没有突破方差分析三个原有的假设条件,即正态性.方差齐性和独立性,这其中独立性要求较严格,我们知道方差分析的基本思想其实就是细分,将所 ...
- 20145224&20145238《信息安全系统设计基础》实验三
20145224陈颢文20145238荆玉茗 <信息安全系统设计基础>第五次实验报告 课程:信息安全系统设计基础 班级: 1452 姓名:荆玉茗 陈颢文 学号:20145238 20145 ...
- 用jQuery Mobile搭建一个简单的手机页面
1.新增html页面. 2.声明html5Document. 3.载入jQuery Mobile Css.jQuery与jQuery Mobile链接库. 4.使用jQuery Mobile定义的ht ...
- You Only Live Once
从做 PreAngel 以来,每年我都会抽空去美国一两次,主要是在硅谷(湾区)一带见见当地的朋友,他们主要有 VC.创业者.斯坦福和伯克利的学生创业组织负责人.无线科技领域的各种组织机构负责人等,我一 ...