iPhone开发重构:提取公用的方法以清理重复代码
来源:互联网 发布:音乐编辑软件手机版 编辑:程序博客网 时间:2024/05/21 12:55
无论在iPhone开发还是学习的过程中都会看到一些不是很理想的代码,不可否认自己也在不断“贡献”着这类代码。面对一些代码的“坏味道”,重构显然是个有效的解决途径。《iPhone开发重构》系列就想总结和补充iPhone开发中经历的一些重构,其间可能会引用一些开源以及实际项目的代码,本着对技术的探求,冒昧之处还请作者多多见谅。
代码重复是一个比较明显的“坏味道”,提取公用的方法就是解决的途径之一。iPhone开发中,使用UITableView的时候就有如下一段“经典”的模板代码,因为这是项目模板自动生成的,所以很多人就自然接受了。但随着越来越多地通过copy&paste在一个项目中使用这段代码,大家是否有些采取行动的压力呢?好吧,我们就从这“动刀”吧!
重构前:
- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"wikiHowCell";
UITableViewCell *cell = (WHTableViewCell *)[tv dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[WHTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.title = [[featuredArticles objectAtIndex:indexPath.row] objectForKey:@"title"];
return cell;
}
对此我们可以提取个公共的方法,并放置在一个适当的地方。UITableViewCell的Category应该是一个比较好的去处。重构后提取的方法以及实际调用的代码如下:
重构后:
@implementation UITableViewCell(Cache)
+ (id)dequeOrCreateInTable:(UITableView*)tableView withId: (NSString*)reuseId andStyle:(UITableViewCellStyle)style {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseId];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:style reuseIdentifier:reuseId] autorelease];
}
return cell;
}
@end
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [UITableViewCell dequeOrCreateInTable:tableView withId:@"wikiHowCell" andStyle:UITableViewCellStyleDefault];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.title = [[featuredArticles objectAtIndex:indexPath.row] objectForKey:@"title"];
return cell;
}
从代码量衡量,仅从此处可能感觉重构前后变化不大,甚至还会略有增多。但如果考虑到公用方法的多次使用产生的“效益”,付出的努力应该是值当的!
- iPhone开发重构:提取公用的方法以清理重复代码
- iPhone开发重构:提取方法以调整函数粒度
- iPhone开发重构:提取方法以调整抽象层次
- iPhone开发重构:提取类以构成模板模式
- JDBC:提取重复代码进行重构
- 提取不重复的整数(去重)
- 多行重复代码的重构
- 代码重构的方法
- 代码重构的方法
- 重构方法进阶(十一):代码常用重构方法(提取方法&将方法内联化)
- CodeSmith 公用代码共享方法
- 常用js代码公用方法
- 记录一条清理重复数据的SQL代码
- 【iPhone开发常用代码积累】各种路径的获取方法
- 找到java代码中没有被使用的公用方法
- 四舍五入的公用方法
- iOS开发---常用公用方法
- eclipse如何从一个复杂得方法中提取一小段代码到新的方法上(重构方式之一)
- 泛化、依赖、关联、聚合、组合
- 离散事件仿真
- 多线程编程之计算限制型异步操作(续)
- joj 2575: Moveable quadrangle with three edges ()
- 字符串类型处理实战
- iPhone开发重构:提取公用的方法以清理重复代码
- iPhone开发重构:提取方法以调整函数粒度
- iPhone开发重构:提取方法以调整抽象层次
- Joiner的用法
- ASP.NET中用IHttpModule接口实现伪静态
- 国产神器天语Android双核手机W700线下赏机经历
- HDU2273(点到线段距离)
- RegisterPropertyCategory
- 无法解析的外部符号 "int __cdecl