[技术翻译] 构建现代化的Objective-C (下)
我的技术博客经常被流氓网站恶意爬取转载。请移步原文:http://www.cnblogs.com/hamhog/p/3563880.html,享受整齐的排版、有效的链接、正确的代码缩进、更好的阅读体验。
本文翻译自:Structuring Modern Objective-C 译者:Ley,戴仓薯
(接上)
为 #import 语句分组
这一点我们都时不时遇到过。有多少次你写了一个(也许是)长长的 implementation 文件,十几、二十个 #import 语句随意堆在开头?唉呀唉呀唉呀。没关系!我们来帮忙解决。
#import 的顺序是否重要尚存争议,因此我们先不说它。确定重要的是你要为它们分组。然后为每一组添加注释。
// Frameworks
#import <QuartzCore data-preserve-html-node="true"/QuartzCore.h> // Views
#import "ASHButton.h"
#import "ASHUserView.h" // View Controllers
#import "ASHOtherViewController.h"
#import "ASHThisViewController.h"
不要等到一团乱麻再去收拾——现在就开始整理!以后再往里添加就很轻松了,也让你的代码保持整洁。
不要用 #define 来定义常量
此话一出,定是一片哗然。但是常量的关键在于,嗯,它们是常量。名称不变,值也不变。当你 #define 一个常量,它会定义在其他每一个编译器检查到的文件里,直到遇到#undef(如果有的话)。呃。这感觉可一点都不像常量,倒像是全局变量之类的东西。
不要这样做。
取而代之的做法是:将常量在头文件里声明为 extern 变量,同时在相应的 implementation 文件中定义。
在头文件中:
extern const CGFloat ASHHeaderViewHeight;
然后,在 implementation 中,
const CGFloat ASHHeaderViewHeight = 44.0f;
现在你的常量可以对任何需要的人可见(他们只需 #import 头文件),但对程序的其他部分都不可见。它也不可能被 #undef ,在别处再重新 define (明显的代码坏味道)。
注:Michael 指出,严格地说,我们应该用 FOUNDATION_EXPORT 来代替 extern 。
合理地命名常量
我不在乎你给常量加的前缀是 'k' 、是类名还是一个随便什么前缀,但是要确保一致。并且要有描述性。否则,随着你的代码库越来越大,早晚会产生命名冲突的问题。这一点相信我,不会有错。
本文翻译自:Structuring Modern Objective-C 译者:Ley,戴仓薯
[技术翻译] 构建现代化的Objective-C (下)的更多相关文章
- [技术翻译]构建现代化的 Objective-C (上)
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3561514.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...
- 【云+社区极客说】新一代大数据技术:构建PB级云端数仓实践
本文来自腾讯云技术沙龙,本次沙龙主题为构建PB级云端数仓实践 在现代社会中,随着4G和光纤网络的普及.智能终端更清晰的摄像头和更灵敏的传感器.物联网设备入网等等而产生的数据,导致了PB级储存的需求加大 ...
- 以正确的方式开源 Python 项目 - 技术翻译 - 开源中国社区
以正确的方式开源 Python 项目 - 技术翻译 - 开源中国社区 以正确的方式开源 Python 项目 英文原文:Open Sourcing a Python Project the Right ...
- Qt Creator 更改默认构建目录到工程目录下
Qt Creator 更改默认构建目录到工程目录下 步骤 工具->选项->构建和运行->概要->Default build directory->去掉第一个". ...
- Apache Spark技术实战之6 --Standalone部署模式下的临时文件清理
问题导读 1.在Standalone部署模式下,Spark运行过程中会创建哪些临时性目录及文件? 2.在Standalone部署模式下分为几种模式? 3.在client模式和cluster模式下有什么 ...
- 基于Kubernetes/K8S构建Jenkins持续集成平台(下)
基于Kubernetes/K8S构建Jenkins持续集成平台(下) Jenkins-Master-Slave架构图回顾: 安装和配置NFS NFS简介 NFS(Network File System ...
- 【技术翻译】支持向量机简明教程及其在python和R下的调参
原文:Simple Tutorial on SVM and Parameter Tuning in Python and R 介绍 数据在机器学习中是重要的一种任务,支持向量机(SVM)在模式分类和非 ...
- 使用.NET Core 构建现代化的桌面应用
我们今天要聊的内容主要桌面开发四个方面:Windows平台..NET Core 3 平台上的WPF,Winform, 应用打包解决方案 MSIX 和 XAML 群岛访问原来UWP的控件,让我们的应用程 ...
- [技术翻译]使用Nuxt生成静态网站
本周再来翻译一些技术文章,本次预计翻译三篇文章如下: 04.[译]使用Nuxt生成静态网站(Generate Static Websites with Nuxt) 05.[译]Web网页内容是如何影响 ...
随机推荐
- ECSHOP模板文件说明
最新ECSHOP 2.7.3完整的一套ECSHOP模板有一下构造 • 35个 .dwt文件(模板框架文件.可调用lbi库文件的主体文件) • 57个 .lbi文件(模板库文件,可通过后台库项目管理直接 ...
- ssh免密码登录记录
做mha.hadoop安装过程中都要用ssh免密码登陆,查过一些资料,踩过很多坑,下面用简单记录一下 首先要安装ssh linux : centOS 6.5 yum -y install *ssh* ...
- Eclipse+Maven构建web项目及部署时Maven lib依赖问题的解决
目录 Eclipse中m2e插件构建web项目的步骤 Maven工具构建web项目再导入Eclipse的步骤 [一].Eclipse中m2e插件构建web项目的步骤 第一步:创建项目,按照 New – ...
- [Arduino+Android] 自制土砲智能安全帽
专案动机(1/2) .现今社会中,各种交通运输载具方便了人类的生活,缩小了地域的差异性,当中车辆是人们日常生活中最频繁接触到的一部分. .车辆使人们的行动更加便利,也因此道路上行驶的车辆越来越多. . ...
- ILSpy反编译工具的使用
以前一直使用reflector来查看.net类库的一些信息,不过,自2011年2月份开始,reflector就开始转向收费软件了,所以爱好免费软件的开发者们转而开发自己的反编译软件.于是ILspy就因 ...
- sphinx中过滤的简单介绍
1.过滤字符串为空的一些记录的话,可以在sql_query中直接加上where来限制,如: sql_query = \ SELECT a.location_id as id,a.location_ ...
- [原创]javascript prototype 对象 函数 <精简的美丽......>
精简的美丽...... javascript prototype 对象 函数 在javascript中我们都知道创建一个对象使用如下代码var x = {}对象可以拥有属性和方法var x = { ...
- Mysql导出表结构及表数据 mysqldump用法
几个常用用例: 1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u wcnc -p smgp_apps_wcnc > ...
- Session Store
Session Store Configuration Session Usage Flash Data Session Drivers Configuration Since HTTP driven ...
- TCP连接的建立与关闭
TCP是主机对主机层的传输控制协议:建立连接要三个握手,断开连接要四次挥手. 位码即TCP标志位,有6种标示:SYN(synchronous建立联机),ACK(acknowledgement 确认), ...