闭包(block)

block主要解决反向传值和传值问题

1.block申明的公式       返回值类型 (^名字)(参数列表);

2.block实现的公式       名字= ^(参数列表){};

3.局部变量                  定义一个图片的名字的block

void (^imageNameBlock)(NSString *imageName);//申明

__block UIImage *image; //iamge == nil 如果想修改外部变量的值 需添加__block修饰  也就是说如果要在block内部改变外部变量的状态时,需要使用__block修饰

4.实现block

imageNameBlock = ^(NSString *imageName){//实现

image = [UIImage imageNamed:imageName];

self.view.backgroundColor = [UIColor colorWithPatternImage:image];

};

5.调用block

imageNameBlock(@"photo.png");//调用

反向传值:

1.在需要传值的类里面写block,即声明

@property (nonatomic,copy)void (^block)(NSString *content);//block是分配在栈里面的,不需要程序员管理内存

2.需要接收值的地方实现block

NextViewController *nextView = [[NextViewController alloc]init];

nextView.block = ^(NSString *content){

NSLog(@"%@",content);

labelTextBlock(content);

};

3.在需要传送值的地方  调用block

block(@"sfasfaklgjgjkdsjkns");

时间: 2024-10-14 07:08:13

闭包(block)的相关文章

obj-c8[block语法]

Block语法  块语法,本质上是匿名函数(没有名称的函数)C++.JS.Swift等语言,有类似语法,叫做闭包 //Block 的作用,主要是用于回调函数,解耦合 //当方法的参数是block类型,block的参数用户从内向外传值;block的返回值,用于,从外向内返回结果 #import <Foundation/Foundation.h> #import "XunleiDownload.h" #import "LoginManager.h" #imp

关于swift中的&quot;闭包&quot;

闭包的定义 定义一个函数 //: 定义一个 sum 函数 func sum(num1 num1: Int, num2: Int) -> Int { return num1 + num2 } sum(num1: 10, num2: 30) //: 在 Swift 中函数本身就可以当作参数被定义和传递 let mySum = sum let result = mySum(num1: 20, num2: 30) 定义一个闭包 闭包 = { (行参) -> 返回值 in // 代码实现 } in 用于

OC中Block语法、Block使用以及通过Block实现数组排序

Block:语法块,本质上是匿名函数(没有名称的函数) 标准C里面没有Block,C语言的后期扩展版本,加入了匿名函数 在C++.JS.Swift等语言有类似语法,叫做闭包 Block语法和C语言里的函数指针很相似,下面我们先来回顾下C语言中的函数和函数指针 C语言中函数是指:实现某一功能的代码段 完整的函数包括两部分:函数声明.函数定义 函数声明,即函数原型.例如:int sum (int x,int y);具有两个整形参数,一个整形返回值的函数 函数定义,即函数实现.例如:int sum(i

通知,代理,block 单例的使用和区别

区别 1.NotificationCenter 通知中心:“一对多”,在APP中,很多控制器都需要知道一个事件,应该用通知: 2.delegate 代理委托: 1,“一对一”,对同一个协议,一个对象只能设置一个代理delegate,所以单例对象就不能用代理: 2,代理更注重过程信息的传输:比如发起一个网络请求,可能想要知道此时请求是否已经开始.是否收到了数据.数据是否已经接受完成.数据接收失败 3.block(闭包) block和delegate一样,一般都是“一对一”之间通信交互,相比代理bl

【面试】iOS 开发面试题(二)

1. 我们说的oc是动态运行时语言是什么意思? 答案:多态. 主要是将数据类型的确定由编译时,推迟到了运行时. 这个问题其实浅涉及到两个概念,运行时和多态. 简单来说,运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法. 多态:不同对象以自己的方式响应相同的消息的能力叫做多态.意思就是假设生物类(life)都用有一个相同的方法-eat; 那人类属于生物,猪也属于生物,都继承了life后,实现各自的eat,但是调用是我们只需调用各自的eat方法. 也就是不同的对象以自己的

iOS面试必备-iOS基础知识

近期为准备找工作面试,在网络上搜集了这些题,以备面试之用. 插一条广告:本人求职,2016级应届毕业生,有开发经验.可独立开发,低薪求职.QQ:895193543 1.简述OC中内存管理机制. 答:内存管理机制:使用引用计数管理,分为ARC和MRC,MRC需要程序员自己管理内存,ARC则不需要.但是并不是 所有对象在ARC环境下均不需要管理内存,子线程和循环引用并不是这样.与retain配对使用的是release,retain代表引用计 数+1,release代表引用计数-1,当引用计数减为0时

iOS中FMDB的使用

需要用到离线缓存将数据信息存入数据库,在没有网络的时候进行加载,而iOS用的就是sqlite3数据库,用原生的sql我们也能实现,但是书写起来比较麻烦,尤其是其它语言转过来的程序员会感觉吃力,我们一般使用第三方FMDB 2 FMDB的下载地址 https://github.com/ccgus/fmdb 3在FMDB下载文件后,工程中必须导入如下文件,并使用 libsqlite3.dylib 依赖包 4 FMDB常用类 FMDatabase : 一个单一的SQLite数据库,用于执行SQL语句.

iOS_Swift初识之使用三种回调方式自定义Button

最近在学习Swift ,发现青玉伏案大神早期用OC写的一篇博客--IOS开发之自定义Button(集成三种回调模式)  很适合用来熟悉Swift的回调方式,于是我就用Swift翻版了一下,具体实现原理就不多说了,主要贴上Swift的代码给大家看看.由于刚开始了解Swift,有使用不恰当的地方请轻拍.... 上代码: 1.新建一个xib,拖一个UIView到界面上,绑定上自定义的UIView类,拖一个UILabel到view上,写上Button假装是个UIButton:并将label拖到代码当中

iOS 数据库多线程操作

SQLite是支持多线程操作的, 需要在初始化database是做一个线程安全的config,参考下面链接,看起来比较复杂. http://www.cnblogs.com/wfwenchao/p/3964213.html 很多iOS项目中都使用FMDB这个第三方开源库,但FMDB不能在多个线程中共同一个FMDatabase对象,因为这个类本身不是线程安全的,如果这样使用会造成数据混乱等问题. 如要需要多线程操作数据库,那么就需要使用FMDatabaseQueue来保证线程安全了. 首先用一个数据

FMDB用法

iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.PlausibleDatabase.sqlitepersistentobjects等,FMDB (https://github.com/ccgus/fmdb) 是一款简洁.易用的封装库,这一篇文章简单介绍下FMDB的使用. 在FMDB下载文件后,工程中必须导入如下文件,并使用 libsqlite3.dylib 依赖包. FMDB同时兼容ARC和非ARC工