慢慢学会用block
来源:互联网 发布:可擦编程只读存储器 编辑:程序博客网 时间:2024/06/05 11:21
1.block的声明和定义
int(^)(int,int);//类似雨int,NSString *可以作为独立的参数
int(^block)(int);//变量block的声明,类型int(^)(int)
int(^block)(int)=^(int num){
retrun num+5;
}//变量block的定义
示例代码:
类1中实现如下方法
typedef void (^ block1)(NSString *) ;typedef void (^ block2)(int) ;-(void)aa:(block1)block1 bb:(block2)block2{ NSLog(@"begin"); block1(@"sss");// block2(333); NSLog(@"end"); }
控制器中实现如下的操作:
@property(nonatomic,strong)NSString *name; blockController *vc=[[blockController alloc] init]; [vc aa:^(NSString * str) { NSLog(@"%@",str); self.name=str; } bb:^(int num) { NSLog(@"%d",num); }]; NSLog(@"%@",self.name);
我们利用block实现的功能
实现两个类之间的信息交换.
1.block是在类1中的属性,在类1中执行,但是他的定义是在类2中.这个定义过程可以理解为将类2中的代码(包括类2的属性),搬到类1中去执行.这样类1就可以操作类2里面的东西了.
2.类1中的参数可以由类1赋值给block,这样在定义代码块的时候,我们就可以在类2中使用类1的参数,也就是所我们通过代码块让两个类有了交集,变得更像是一个类.
他的功能和回掉函数是一样的.但是比回掉函数更加的灵活.
回掉函数就是类1 把自己和自己的方法作为参数,通过类2的方法传递给类2,然后在类2中使用perform 方法执行类1中的对应方法.
3.block块会对里面的对象有强引用的效果,这有可能导致里面的self对象不能被释放(例如类1引用着类2,而block在类2中有被强引用着)
做法就是 __weak 类1 *weakSel=self;这样可以有效的解决循环引用的问题
4.还有一种情况可能会发生,就是我们使用了weakself,但是在bolck执行之前我们weakself释放了,这时候不会出现内存泄漏的错误,weakself会变成nil
0 0
- 慢慢学会用block
- 慢慢学会忘记
- 慢慢学会成长
- 慢慢学会总结
- 学会使用Block编程
- 刚学会的链表...慢慢改进....
- 041121慢慢地开始学会感受生活了!
- 刚刚学会输这些,一个一个字符慢慢打的
- iOS 学会使用delegate和block<一>
- iOS 学会使用delegate和block<二>
- 慢慢
- 慢慢
- 慢慢
- 程序小技巧【自己慢慢添加慢慢用】
- 要慢慢的学会在前期做更多的工作,后期少的改动
- 学习java,就是要慢慢学会自己验证一些方法的
- 学会用大脑学习
- 学会用google搜索
- Leetcode Reverse Integer
- STM32定时器输出比较模式中的疑惑【转】
- Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五)
- uva439
- Java Web高性能开发--前端高性能(2)
- 慢慢学会用block
- 程序中的@Override 是什么意思
- STM32 CAN 波特率的计算
- 与大学生谈学习BIM软件开发所需要的准备
- vtkMapper,vtkActor,vtkRenderer,vtkRenderWindow四者之间的关系,以及与输入输出相连
- 怎样在word中插入不同的页码
- Java Web高性能开发--网站优化实战
- HDU 2110 Crisis of HDU
- 基于SSH2框架Struts2拦截器的登录验证实现