iOS开发细节 | 使用block时如何保障代码的可读性?

原文

iOS开发细节 | 使用block时如何保障代码的可读性?

故事背景

最近我写代码的时候在想:如何让将来接手这个项目的人能快速定位到想要修改的代码位置,比如我的这个页面:

iOS开发细节 | 使用block时如何保障代码的可读性?

这是未登录时展示的占位view,点击登录按钮会跳转到登录页面。如果我们想定位登录按钮点击回调的相关代码位置——

delegate

如果用delegate,代码是这样的(我这里只写了C层的代码):

#pragma mark - Delegate - 登录占位图view
#pragma mark -- 登录按钮点击时回调
- (void)loginView:(CQPointHUD *)loginView loginButtonDidClick:(UIButton *)sender{
    CQLoginViewController *loginVC = [[CQLoginViewController alloc]init];
    [self.navigationController pushViewController:loginVC animated:YES];
}

这样的代码非常清晰可读,我相信将来任何来维护的人都可以快速定位到具体代码位置。

block

如果用block,代码是这样的:

self.loginView = [[CQPointHUD alloc]initWithLoginViewFrame:self.view.bounds loginButtonClickedBlock:^{
        CQLoginViewController *loginVC = [[CQLoginViewController alloc]init];
        [self.navigationController pushViewController:loginVC animated:NO];
}];

如果将来要修改登录按钮点击事件的逻辑,还要去登录占位图view的初始化方法里寻找,相对delegate来言确实没那么直观了。

那么如何打破这种局面呢?

目前我想到的方法是将block回调里的代码抽离出来,然后给出具体注释,如下:

self.loginView = [[CQPointHUD alloc]initWithLoginViewFrame:self.view.bounds loginButtonClickedBlock:^{
        // 登录按钮点击
        [self loginButtonClicked];
}];
#pragma mark - 登录按钮点击
/** 登录按钮点击 */
- (void)loginButtonClicked{
    CQLoginViewController *loginVC = [[CQLoginViewController alloc]init];
    [self.navigationController pushViewController:loginVC animated:NO];
}

这样修改后定位代码位置就和delegate一样快速了。虽然只是简单的修改,但是对于将来更好的维护还是具有一定帮助的。

总结

相对delegate,block的优势是使用快捷方便,但如果处理不当时弊端也很明显:可读性相对较低。写代码的时候多换位思考下,这样可以有效的保障自己写的代码的可读性。

附两个占位图view的demo

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » iOS开发细节 | 使用block时如何保障代码的可读性?

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址