现代ios应用的开发。不使用GCD和block,效率会减少非常多,在今年3月份之前,我在block的学习和使用方面,精力和经验都明显不足,在SF有个牛逼同事。不仅自己积累了一套库,并且对这个库持续进行更新和维护,其架构能力和代码水平都不错,他的代码中使用了大量的GCD,为了适应这些技术。我在coding的过程中,開始有意识的多写GCD的代码,刚開始一切顺利。直到我使用block来作为一个对象的属性。这让我纠结了非常久。
我遇到的问题是:1。这样的属性block,其它类在使用的时候,应该怎么写? 2,block的类型不为void、int,而是对象时,比方NSString*时,又应该怎么办?
这两个非常easy的问题,让我前后一起纠结了2个多小时。以下,我把我的測试代码上上来。希望对遇到相同问题的人,有所帮助。以下直接上代码了。
头文件例如以下,实现文件里不须要实现不论什么代码。
#import <Foundation/Foundation.h>
typedef
int(^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 = [[HBTestBlock
alloc] init];
objPropertyBlockObj.viewGetter = ^(NSString *imageName){
// return [[UIView alloc] init]; //特别注意此处。若对象不匹配,则会报错,设置为nil也会报错。
return [self
currentView];
};
objPropertyBlockObj.viewGetter(@"hello");
//实际运行block
}
- (UIView *)currentView
{
NSLog(@"now I am in currentView");
return
nil;
}
- (void)testPropertyBlock
{
HBTestBlock *properBlockObj = [[HBTestBlock
alloc] init];
properBlockObj.compare = ^(int a,int b)
{
int result = [self
maxer:a another:b];
NSLog(@"the result is %d",result);
return result;
};
));
}
- (int)maxer:(int)a another:(int)b
{
if (a > b) {
return a;
}
return b;
}
重要经验五:block作为属性的注意事项的更多相关文章
-
Vuex的五个核心属性
Vuex的五个核心属性 Vuex的五个核心概念 本文参考自Vue文档,说的非常详细,建议看文档. Vuex是什么? VueX 是一个专门为 Vue.js 应用设计的状态管理架构,统一管理和维护各个vu ...
-
【NX二次开发】Block UI 属性类型
Block UI 属性类型的读写总结: 帮助文件 NXOpen::BlockStyler::UIBlock::GetProperties() String类型 //设置值 this->块ID- ...
-
【HighCharts系列教程】五、版权属性——Credits
一.Credits属性说明 严格来讲,Credits并不算版权信息,官方的说法是:Highchart by default putsa credits label in the lower right ...
-
四种传值方法(通知、block、属性、NSUserDefaults)
1. 通知传值-一般常用于返回界面的时候,把返回前界面的值传到返回后界面. //前一个界面 //注册通知 [[NSNotificationCenter defaultCenter] addObserv ...
-
一次 outline 去除经验(非继承属性,看着像继承)
情况描述: 目前维护的老项目是通过 easyui 生成的 html,嵌套结构非常多,当点击元素后,会有个边框???非常影响页面美观,这是啥迷惑点击交互??? 经验告诉我,这是 css 的 outlin ...
-
JMeter学习(二十五)HTTP属性管理器HTTP Cookie Manager、HTTP Request Defaults
Test Plan的配置元件中有一些和HTTP属性相关的元件:HTTP Cache Manager.HTTP Authorization Manager.HTTP Cookie Manager.HTT ...
-
web设计经验<;五>;国外设计师总结的7个找灵感实用方法
每个设计师不时会有创意灵感缺失.大脑一片空白的状态.盯着一个空白的屏幕,发愁着“好吧,我现在该做什么呢?该怎么做呢?”有些人喜欢静待,但这不是唯一的一个方法.焦虑的客户或者是你自己的不耐烦,都会让你无 ...
-
(五)带属性值的ng-app指令,实现自己定义模块的自己主动载入
如今我们看下怎样使用带属性值的ng-app命令,让ng-app自己主动载入我们自己定义的模块作为根模块. <!DOCTYPE html> <html> <head> ...
-
mysql学习(五)-字段属性
字段属性: unsigned: 无符号类型,只能修饰数值类型: create table if not exists t1(id int unsigned); zerofill:前端填0 //只能修饰 ...
随机推荐
-
读书笔记--SQL必知必会22--高级SQL特性
22.1 约束 约束(constraint),管理如何插入或处理数据库数据的规则. DBMS通过在数据库表上施加约束来实施引用完整性. 大多数约束是在表定义中定义的. 22.1.1 主键 主键,用来保 ...
-
折腾笔记之wordpress安装出现错误---【wordpress点击文章找不到网页的解决办法】
本来写的好好的在后台,然后发表在前台,能够看见在网站首页,但是一点击进去,就提示找不到链接了.郁闷,经过查找资料.终于解决了 1,.htaccess要开放写权限,这样在自定义wp的永久链接时,wp会自 ...
-
SPOJ375 Query on a tree
Description You are given a tree (an acyclic undirected connected graph) with N nodes, and edges num ...
-
IE8下JQuery clone 出的select元素使用append添加option异常解决记录
遇到一个怪现象,由于配置参数是多实例的, 故采用JQuery对模板HTML代码进行clone, HTML代码中包括select标签, 在克隆之后需要对select进行添加option. 在firefo ...
-
(10)odoo控制器操作
-----------------更新时间11:17 2016-09-18 星期日 完善讲解17:44 2016-02-17 星期三-----------------* 控制器Controlle ...
-
pxe+preseed安装配置
Ubuntu Server 部署手册 pxe+tftp+vsftp+apache2 ========================================================== ...
-
Apache Maven 入门
Apache Maven 入门篇 ( 上 ) Apache Maven 入门篇 ( 下 ) ~$mvn archetype:generate -DgroupId=com.mycompany.hello ...
-
一步一步写一个简单通用的makefile(四)--写一个通用的makefile编译android可执行文件
通常要把我们自己的的代码编译成在android里面编译的可执行文件,我们通常是建一个文件夹 . ├── Android.mk ├── Application.mk ├── convolve.cl ├─ ...
-
【转】常见 jar包详解
转载自:http://www.cnblogs.com/xusir/archive/2013/05/19/3086878.html jar包 用途 axis.jar SOAP引擎包 commons- ...
-
js实现对树深度优先遍历与广度优先遍历
深度优先与广度优先的定义 首先我们先要知道什么是深度优先什么是广度优先. 深度优先遍历是指从某个顶点出发,首先访问这个顶点,然后找出刚访问这个结点的第一个未被访问的邻结点,然后再以此邻结点为顶点,继续 ...