iOS中block和代理的使用
来源:互联网 发布:淘宝三个皇冠信誉高吗 编辑:程序博客网 时间:2024/05/21 10:10
来源:http://www.2cto.com/kf/201501/374114.html
从ios4开始引入block,就是代码块,结构类c语言
基本结构 返回值 (^block名称)(参数):int(^BlockName)(int):返回值为int型,参数是一个int值的叫BlockName的block
我们使用一个block时:
二:数据请求回调
// 代码例子int (^BlockExample)(int);BlockExample = ^(int n){return n*2;};int result = BlockExample(1);
个人使用场景:
一:动画
我第一次接触到block是动画块,之前写UIView动画块的时候都是begin和end之间写需要处理的动画效果,结束要得在delegate中实现,而且一个页面上所有的动画结束回调都在一个方法中区分,确实有点蛋疼,之后出现block方式简介明了很多:
[UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{//做动画的内容 } completion:^(BOOL finished) {//动画完成后的回调}];
二:数据请求回调
先前请求回调都会在代理方法中完成,现在直接在发起请求方法中加一个complete block
[self postRequest:request getReustl:^{//get result}];
三:枚举回调
之前我们会用for循环去访问array中每个元素,现在我们会用到block:
//array enum的例子[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { //处理array中每个元素}];
四:多线程gcd
后面在多线程中接触到block:比较直观
*在block中修改变量
正确的做法:
*我们有时候会遇到block会retain住整个页面,使其返回的时候无法调用dealloc,从而没法释放内存
--enddispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //需要在多线程进行的操作 dispatch_async(dispatch_get_main_queue(), ^{ //主线程操作 });});
*在block中修改变量
我们没法去修改一个变量的值除非在这个变量前面加上__block
错误的做法
int i = 0;[self excuteBlock:^{ i = 2;}];
正确的做法:
__block int i = 0;[self excuteBlock:^{ i = 2;}];
*我们有时候会遇到block会retain住整个页面,使其返回的时候无法调用dealloc,从而没法释放内存
所以我们在block内都会用弱引用retain cycle的问题
比如:
typeof(self) __weak weakSelf = self;[self excuteTask:task success:^(id responseModel) { //handle success weakSelf.bottomView.isLike = YES; [weakSelf doSomeThing]; }failure:^(NSError *error) { //handle failure }];
*什么时候用代理,什么时候用block
公共接口,方法较多也选择用delegate进行解耦
iOS有很多例子比如最常用tableViewDelegate,textViewDelegate
异步和简单的回调用block更好
iOS有很多例子比如常用的网络库AFNetwork,ASIHTTP库,UIAlertView类。
0 0
- iOS中block和代理的使用
- iOS中代理、通知、block的使用
- iOS代理方法和block的使用
- IOS中block和代理
- iOS开发中 代理,block,KVO 的使用
- 我对IOS中代理和block的理解
- Block和代理的使用
- iOS中block的定义和使用
- IOS 中block 的声明和使用
- iOS中block的定义和使用
- iOS中block的定义和使用
- iOS中 block 代理 通知的区别
- iOS 协议代理.block的基本使用
- iOS 代理和block的理解
- iOS Block 和 代理的 对比
- iOS block和代理的区别
- IOS中Block的使用
- iOS中的代理和Block
- go- 特点
- UGUI Button
- 基于CXF webService(5)REST service
- Cocos Studio和Cocos2d-x版本对应关系
- 禁止ScrollView的childview自动滑动到底部
- iOS中block和代理的使用
- 剑指Offer面试题45(Java版):圆圈中最后剩下的数字
- [iOS]为什么手动打印UITableViewCell的宽度是320高度是44
- jQuery的AJax异步访问
- HDU 5375 Gray code(2015年多校联合 动态规划)
- 载波同步环路的带宽与信噪比相关问题
- 关于iOS的强引用,弱引用及strong,retain,copy,weak,assignd的关系
- C#高级编程八十三天----程序集的含义
- 介绍以threading模块来实现定时器的方法