Block & 代理

1. 特点: block 是C语言的,是一种数据类型,可以当做参数来传递(这种用的较多), 也可以当做返回值来用(用的较少),是提前转备好的代码,在需要的时候执行。

2.定义,block在定义的时候,要使用copy进行一次拷贝。@property (nonatomic, copy) void (^MyBlock)(NSString *, NSError *);

  返回类型 (^blockName)(参数列表) = ^返回类型 (参数列表) { /// 代码实现; }

3.默认情况下,不允许在block内部修改内部变量的指,在外部变量声明时,使用__block 修饰符,则可以在block内部修改变量  

4.数组的遍历和排序可以使用block, 遍历: enumerateObjectsUsingBlock: 效率要for 高,苹果官方推荐使用。排序 sortedArrayUsingComparator:

5.block和代理的对比:

  1. block是提前准备好块代码,在需要的时候调用执行,简单,所有的代码在一起,便于阅读和维护, 适合用在回调方法较少的情况, 可以用于线程间的通信。在block中使用self 的时候,需要注意循环引用造成内存泄露的问题。解决的方法是, __Weak  typeof(self)Myself = self, 使用myself来代替self

  2.代理是调用方和被调用方,通过代理协议,来实现代理方法。调用方,1.定义协议,代理方法 2. 定义代理属性,负责执行代理方法的对象,需要使用弱指针,负责会出现循环引用 3.需要的时候,通知代理执行代理方法,需要先判断方法是否实现

  被调用方:1.遵守代理协议 2.设置代理,通知谁去执行代理方法 3.实现代理方法,等待被调用

  代理试用于协议方法很多的场景,如UITableView

时间: 2024-12-14 04:31:06

Block & 代理的相关文章

页面之间传值方式的总结,五种方式,通知,block,代理,单例,NSUERDEFALUT,

首先代码拿上 1:单例 2:通知 3:代理 4:block方法 5:NSUSERDEFAULT(沙盒文件) 先是单例类: .h文件 @interface DataSource : NSObject @property (nonatomic, strong) NSString *myName;//单例的属性,用于传值 +(DataSource*)sharedDataSource;//建立单例对象 @end .m文件 #import "DataSource.h" @implementati

基于HTML5之APP页面间的传值的几种方式

一 摘要 在做APP开发时,避免不了出现两个页面之间的传值,在iOS开发中两个页面传值常见的有:属性传值,block,代理,通知等方式.那么web程序两个页面传值的形式有哪些呢,在这里我给大家总结一下. 1)PC版的web程序 两个两个页面之间的传值方式主要有: 1.cookie 2.查询字符串 3.还可以通过服务端的session来交换数据 2)HTML之app的传值方式 主要有: 1.HTML5 LocalStorage 本地存储 2.隐藏字段 3.服务器端的session等 4..页面已创

LocationCoder 地图经纬度解析

LocationCoder 地图经纬度解析 其实,在地图里面将地图解析成有意义的地址,或者把地址转换成有意义的经纬度都是很容易的事情,只是我将其封装了支持KVO,通知中心,block取结果,代理取结果而已. 能通过组合的方式来封装对象扩展功能就绝对不会用继承的方式来扩展功能,只有当组合解决不了问题时才会使用继承:). 源码: LocationCoder.h + LocationCoder.m // // LocationCoder.h // // http://home.cnblogs.com/

iOS-代理托付的使用

#import "Rigester_ViewController.h" #import "Rigester_ViewController.h" @interface Rigester_ViewController () @end @implementation Rigester_ViewController * 正向传值能够用属性 反向传值代理Block 代理:又叫托付 自己不能办得事托付给别人去干 UIAlertView,UITextField 都使用了代理 写代

沙盒本地数据化

model : 1 .怎么来的  2: 放在哪 3: 怎么用是一个好的方式 数据本地化 : 1: 什么事沙河,沙河都有哪些文件夹,作用是什么. 2: 什么事数据本地化,什么时候使用 3: 如何把一个数组,字典,字符串,NSData放入本地 4: 如何把一个Person对象存入本地 NSFileManger  NSFileHandle(了解就行) ;                                            沙盒机制 --------------沙盒 沙盒 : 每个iO

iOS-代理委托的使用

#import "Rigester_ViewController.h" #import "Rigester_ViewController.h" @interface Rigester_ViewController () @end @implementation Rigester_ViewController * 正向传值可以用属性 反向传值代理Block 代理:又叫委托 自己不能办得事委托给别人去干 UIAlertView,UITextField 都使用了代理 写代

iOS面试笔试题附部分答案

面试反正看面试官水平和心情,我遇到的比较怪的问题还有"你觉得你是个有爱的人吗?"哈哈哈哈...只能说整理些下面是自己整理的,答案不一定对,哪里错了望不吝指正. iOS面试题集锦 至少10款以上iOS领域的开源组件: AFNetworking (NSURLConnction+NSOperation), Masonry,SDWebImage,MBProgreeHUD,MJRefresh,MWPhotoBrowser ,JSONKit http://www.jianshu.com/p/207

ios 定位 航向检测

1 // ViewController.m 2 // CoreLocation框架的基本使用—定位 3 // 注意 点: 1.设置地位可用 2. 设置允许本程序定位(对弹出的框,允许即可) 3. 为模拟器 设置位置移动方式, 比如 Freeway Drive(自由驾车模式) 4 5 6 #import "ViewController.h" 7 #import <CoreLocation/CoreLocation.h> 8 9 #define isIOS(version) (

ios 指南针

指南针图片  IBOutlet UIImageView *compassView 1 #import "ViewController.h" 2 #import <CoreLocation/CoreLocation.h> 3 4 #define isIOS(version) ([[UIDevice currentDevice].systemVersion floatValue] >= version) 5 /** 6 先决条件:真机测试,模拟器上没有磁力计 传感器 7