重要经验五:block作为属性的注意事项
来源:互联网 发布:如何安装车载导航软件 编辑:程序博客网 时间:2024/06/05 09:03
现代ios应用的开发,不使用GCD和block,效率会降低很多,在今年3月份之前,我在block的学习和使用方面,精力和经验都明显不足,在SF有个牛逼同事,不仅自己积累了一套库,而且对这个库持续进行更新和维护,其架构能力和代码水平都不错,他的代码中使用了大量的GCD,为了适应这些技术,我在coding的过程中,开始有意识的多写GCD的代码,刚开始一切顺利,直到我使用block来作为一个对象的属性,这让我纠结了很久。
我遇到的问题是:1,这种属性block,其他类在使用的时候,应该怎么写? 2,block的类型不为void、int,而是对象时,比如NSString*时,又应该怎么办?
这两个很简单的问题,让我前后一起纠结了2个多小时。下面,我把我的测试代码上上来,希望对遇到同样问题的人,有所帮助。下面直接上代码了。
头文件如下,实现文件中不需要实现任何代码。
#import <Foundation/Foundation.h>
typedefint(^compareBlock)(int a,int b);
@interface HBTestBlock :NSObject
@property(nonatomic,copy) compareBlock compare;
@property(nonatomic,copy) UIView *(^viewGetter)(NSString *imageName);//注意其返回类型为UIView *
@end
下面这两个函数,展示的是如何在其他的类中,使用这两个属性。
#pragma mark 测试对象的属性为block
- (void)testObjPropertyBlock
{
HBTestBlock *objPropertyBlockObj = [[HBTestBlockalloc] init];
objPropertyBlockObj.viewGetter = ^(NSString *imageName){
// return [[UIView alloc] init]; //特别注意此处,若对象不匹配,则会报错,设置为nil也会报错。
return [selfcurrentView];
};
objPropertyBlockObj.viewGetter(@"hello");//实际执行block
}
- (UIView *)currentView
{
NSLog(@"now I am in currentView");
return nil;
}
- (void)testPropertyBlock
{
HBTestBlock *properBlockObj = [[HBTestBlockalloc] init];
properBlockObj.compare = ^(int a,int b)
{
int result = [selfmaxer:a another:b];
NSLog(@"the result is %d",result);
return result;
};
NSLog(@"the properBlockObj.compare is %d",properBlockObj.compare(100,200));
}
- (int)maxer:(int)a another:(int)b
{
if (a > b) {
return a;
}
return b;
}
- 重要经验五:block作为属性的注意事项
- 【iOS】block作为属性时候的坑
- ARC中block块作为属性的使用笔记
- ios-block作为属性的时候为什么用copy
- Oracle ERP上线准备的五条重要经验
- block的注意事项
- 105,block的注意事项
- Block作为属性、方法参数、返回值
- c++重要的经验
- ios-block的作为参数
- 谈谈Block作为属性、方法参数、方法的返回值的应用
- block的使用和注意事项
- 重要的嵌入式测试经验
- 一些比较重要的经验
- MSHFLEXGRID的重要属性.
- 一些重要的属性
- RelativeLayout 重要的属性
- 重要的属性二
- Database ERROR:Table 'snort.acid_ag' doesn't exist
- WebBrowser 打印 总结
- Selenium介绍及原理解析
- Java第二课之从键盘上键入一个数
- Python<10>文件基础
- 重要经验五:block作为属性的注意事项
- 学习C/C++语言:用数组处理Fibonacci数列
- centos 6.2安装ar8152网卡驱动
- Win7 64位机上安装VisualSVN-Servers失败解决方案
- 第三方数据库类库使用(FMDB)
- ios开发 block 在ARC机制下的内存管理
- Struts2中的ModelDriven机制及其运用
- 一对夫妇的离婚账单
- Linux系统对IO端口和IO内存的管理