IOS开发之block块详细分析
来源:互联网 发布:酷狗铃声截取软件 编辑:程序博客网 时间:2024/06/06 06:07
一.定义一个block的过程
注明:A类(引用block的类)B类(声明block的类)
(1)声明一个block,如下:
B类
typedef void (^MyBlock)(NSString *);
(2)类里面定义block对象,如下:
B类
MyBlock my;(成员变量)
@property (nonatomic , strong) MyBlock myBlock;(属性)
(3)在block类里面声明一个含有block的方法,作用是在引用block的类里面调用block块,方面后面回调block里面的方法
B类
-(id)initwithBlock:(MyBlock)str;
A类
B *b = [[B alloc] initwithBlock:Block_copy(^(NSString *str){
NSLog(@"%@",str);
labShow.text = str;
})];
(4)触发block执行,执行后回调A类里面的方法
只要想办法执行block就行了,因为只有触发block才能实现方法的回调,下面分集中方法来触发
《1》如果B类里面触发,例如在B类里面声明一个按钮,点击按钮就触发block
-(id)initwithBlock:(MyBlock)str { self = [super init]; if(self) { _myBlock = str; } return self; }
-(IBAction)back:(id)sender { NSString* s = txtView.text; if(_myBlock) { _myBlock(s); } [self.navigationController popViewControllerAnimated:YES]; }
这样的话就出发了然后就去回调A类的含有block的方法了
《2》在A类里面调用B类的方法,B类直接声明类方法,方法里面触发block
A类
- (IBAction)btnClick:(UIButton *)sender{ CGRect temp = CGRectMake(_btnOutlet.frame.origin.x, _btnOutlet.frame.origin.y, _btnOutlet.frame.size.width+50, _btnOutlet.frame.size.height+20); [B ChangeRootViewBtnRect:temp blockcompletion:^(UIColor *colorEnum) { /*函数回调 当block执行时就会回到这里*/ _btnOutlet.backgroundColor = colorEnum; }];}
B类
+ (void)ChangeRootViewBtnRect:(CGRect)rect blockcompletion:(Changcolor)Changcolorblock{ UIColor *temp = [UIColor greenColor]; Changcolorblock(temp); //执行block }
《3》在B类里面不声明含有block的方法直接声明block属性,直接声明block对象在对象里面添加实现的功能
B类
@property (nonatomic , strong) MyBlock my;(属性)
A类
A *block = [[A alloc] init]; block.testBlock = ^() { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Block学习" message:@"测试成功" delegate:self cancelButtonTitle:@"取消吧" otherButtonTitles:@"OK", nil]; [alert show]; }; [block StartBlock];
B类
在B.h
- (void)StartBlock;
在B.m
- (void)StartBlock{ [self performSelector:@selector(test) withObject:nil afterDelay:2.0];}- (void)test{ if (_myBlock) { _myBlock(); }}
总结:block实现过程就是调用block方法,触发block,然后回调block方法实现的内容
- IOS开发之block块详细分析
- [ios开发基础之]代码块 ——block
- IOS开发(101)之程序块block初窥
- IOS开发之路-Objective-C 代码块(Block)-block计算器的实现
- iOS开发-进阶:代码块 block
- iOS开发之Block
- IOS学习之block代码块
- IOS学习之block代码块
- IOS学习之block代码块
- IOS学习之block代码块
- IOS学习之block代码块
- iOS开发:block常见问题分析
- iOS开发之使用block块进行数据遍历的方法
- Block代码块分析
- iOS 代码块Block
- iOS block块
- IOS中块Block
- iOS block代码块
- Introducing SDN-MQ: A Powerful and Simple-to-Use Northbound Interface for OpenDaylight
- 第三章第二十九题
- POJ - 3295 - Tautology (构造)
- Android中基于HTTP的通信技术(2)使用Http的Post方式读取网络数据
- EAS-Web开发环境问题汇总
- IOS开发之block块详细分析
- 得到数据库中的数据,并在Highcharts控件中显示
- R语言基础备忘-plot()详解
- 闭包 Scala学习笔记-面向对象篇
- 黑马程序员--GUI
- 查询oracle被锁的表及其如何释放
- Interesting-Linux shell之inpath.sh
- mongodb的简易入库
- 安装和配置JDK