我的技术博客经常被流氓网站恶意爬取转载。请移步原文: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 (下)的更多相关文章

  1. [技术翻译]构建现代化的 Objective-C (上)

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3561514.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...

  2. 【云+社区极客说】新一代大数据技术:构建PB级云端数仓实践

    本文来自腾讯云技术沙龙,本次沙龙主题为构建PB级云端数仓实践 在现代社会中,随着4G和光纤网络的普及.智能终端更清晰的摄像头和更灵敏的传感器.物联网设备入网等等而产生的数据,导致了PB级储存的需求加大 ...

  3. 以正确的方式开源 Python 项目 - 技术翻译 - 开源中国社区

    以正确的方式开源 Python 项目 - 技术翻译 - 开源中国社区 以正确的方式开源 Python 项目 英文原文:Open Sourcing a Python Project the Right ...

  4. Qt Creator 更改默认构建目录到工程目录下

    Qt Creator 更改默认构建目录到工程目录下 步骤 工具->选项->构建和运行->概要->Default build directory->去掉第一个". ...

  5. Apache Spark技术实战之6 --Standalone部署模式下的临时文件清理

    问题导读 1.在Standalone部署模式下,Spark运行过程中会创建哪些临时性目录及文件? 2.在Standalone部署模式下分为几种模式? 3.在client模式和cluster模式下有什么 ...

  6. 基于Kubernetes/K8S构建Jenkins持续集成平台(下)

    基于Kubernetes/K8S构建Jenkins持续集成平台(下) Jenkins-Master-Slave架构图回顾: 安装和配置NFS NFS简介 NFS(Network File System ...

  7. 【技术翻译】支持向量机简明教程及其在python和R下的调参

    原文:Simple Tutorial on SVM and Parameter Tuning in Python and R 介绍 数据在机器学习中是重要的一种任务,支持向量机(SVM)在模式分类和非 ...

  8. 使用.NET Core 构建现代化的桌面应用

    我们今天要聊的内容主要桌面开发四个方面:Windows平台..NET Core 3 平台上的WPF,Winform, 应用打包解决方案 MSIX 和 XAML 群岛访问原来UWP的控件,让我们的应用程 ...

  9. [技术翻译]使用Nuxt生成静态网站

    本周再来翻译一些技术文章,本次预计翻译三篇文章如下: 04.[译]使用Nuxt生成静态网站(Generate Static Websites with Nuxt) 05.[译]Web网页内容是如何影响 ...

随机推荐

  1. 网页标签图片如何保存&下载?

    最简单的方法就是鼠标右键,查看网页源代码,ctrl+f输入favicon.ico,一般网站都是这个

  2. [C#源码]VS各版本转换器(支持VS2012,VS2013)

    项目名称:[C#源码]VS各版本转换器(支持VS2012,VS2013) 下载内容: (C#源码)VS各版本转换器 实现功能: 支持vs2003-vs2013的各版本转换,由高到低,由低到高都支持. ...

  3. 教你50招提升ASP.NET性能(二):移除不用的视图引擎

    (2)Remove unused View Engines 招数2: 移除不用的视图引擎 If you're an ASP.NET MVC developer, you might not know ...

  4. 正则表达式30分钟入门教程<转载>

    来园子之前写的一篇正则表达式教程,部分翻译自codeproject的The 30 Minute Regex Tutorial. 由于评论里有过长的URL,所以本页排版比较混乱,推荐你到原处查看,看完了 ...

  5. AVAudioRecorder、AVAudioPlayer录音及播放

    #pragma mark - 设置录制的音频文件的位置 - (NSString *)audioRecordingPath{ NSString *str_date=[TimeTransform Date ...

  6. 【49】了解new_handler的行为

    1.使用operator new无法获取内存时,对于旧式编译器,会返回一个null指针.对于新式编译器,会抛出一个异常. 2.考虑下面的需求,当operator new 无法获取内存时,程序员期望获得 ...

  7. 怎样加入� android private libraries 中的包的源码

    先上图: 这里以加入� afinal_0.5.1_bin.jar 为例. 第一步:加入�jar包到libs里面,系统自己主动把jar载入到android private libraries中: 第二步 ...

  8. Support Facades

    Support Facades Introduction Facades provide a "static" interface to classes that are avai ...

  9. Java基础知识强化之IO流笔记63:随机访问流RandomAccessFile

    1. 随机访问流RandomAccessFile RandomAccessFile类不属于流,是Object类的子类.但它融合了InputStream和OutputStream的功能.支持对随机访问文 ...

  10. arcgis 绝对、相对、UNC 和 URL

    您每天都通过路径浏览至数据和工具箱.在共享数据和工具之前,您对此可能没有做太多考虑,其实您也无需考虑.本部分将详细讨论以下方面内容:路径.定义不同类型的路径以及 ArcGIS 对路径的管理方式. 路径 ...