iOS Development Guidelines
  • Introduction
  • 规范
    • 0. 介绍
    • 1. 序言
    • 2. 代码命名规范
      • 2.1. 代码命名基础
      • 2.2. 方法(Method)命名
      • 2.3. 函数(Function)命名
      • 2.4. 属性(Property)与数据类型命名
      • 2.5. 其它命名规范
      • 2.6. 可接受缩略名
    • 3. 代码格式规范
      • 3.1. 代码注释格式
      • 3.2. 代码结构与排版
    • 4. 开发实践
      • 4.1. Objective-C保留字
    • 5. Xcode工程结构
    • 6. 版本控制
      • 6.1. Git基本配置
      • 6.2. Git分支模型
      • 6.3. SVN源代码管理规范
      • 6.4. SVN的标准目录结构
    • 7. 附录
      • 7.1. Xcode扩展插件
      • 7.2. 第三方开源库
    • 8. 参考
    • 9. iOS开发优化
  • Swift编码规范
  • Objective-C新特性
  • iOS生命周期
  • Apple 官方设计指南
    • iOS 人机交互指南
      • 概览 - 设计理念
      • 概览 - iOS 10 新功能
      • 概览 - 接口要素
      • 交互 - 3D Touch
      • 交互 - 辅助功能
      • 交互 - 音频
      • 交互 - 身份验证
      • 交互 - 数据输入
      • 交互 - 反馈
      • 交互 - 文件处理
      • 交互 - 初次启动体验
      • 交互 - 手势
      • 交互 - 加载
      • 交互 - 模态
      • 交互 - 导航
      • 交互 - 评分和评论
      • 交互 - 请求权限
      • 交互 - 设置
      • 交互 - 术语
      • 交互 - 撤销与重做
      • 系统功能 - 多任务
      • 系统功能 - 通知
      • 系统功能 - 打印
      • 系统功能 - 快速预览
      • 系统功能 - Siri
      • 系统功能 - TV 供应商
      • 可视化设计 - 动画
      • 可视化设计 - 品牌化
      • 可视化设计 - 颜色
      • 可视化设计 - 布局
      • 图像 - 应用图标
  • Apple 官方开发指南
    • App 发布指南
      • 待完善
    • Cocoa 代码指南
      • 代码命名基础
      • 方法命名
      • 函数命名
      • 属性和数据类型命名
      • 可接受的缩写词和首字母缩写词
      • 针对框架开发者的技术细节
    • 核心蓝牙编程指南
      • 待完善
  • iOS 杂谈
    • Auto Layout 是怎么进行自动布局的性能如何
    • App 启动速度的优化与监控
    • 多人的大项目,架构怎么设计更合理
    • 链接器:符号是怎么绑定到地址上的
    • App 如何通过注入动态库的方式实现极速编译调试
    • 静态分析工具的选择
    • Clang的App 提质
    • 无侵入的埋点方案如何实现
    • 包大小:如何从资源和代码层面实现全方位瘦身
    • iOS 崩溃千奇百怪如何全面监控
    • 如何利用 RunLoop 原理去监控卡顿
    • 临近 OOM,如何获取详细内存分配信息,分析内存问题
    • 日志监控:怎样获取 App 中的全量日志
    • 性能监控:衡量 App 质量的那把尺
    • 远超想象的多线程的那些坑
    • 怎么减少 App 电量消耗
    • 除了 Cocoa,iOS还可以用哪些 GUI 框架开发
    • 细说 iOS 响应式框架变迁,哪些思想可以为我所用
    • 如何构造酷炫的物理效果和过场动画效果
    • A/B 测试:验证决策效果的利器
    • 怎样构建底层的发布和订阅事件总线
    • 如何提高 JSON 解析的性能
    • 如何用 Flexbox 思路开发?跟自动布局比,Flexbox 好在哪
    • 怎么应对各种富文本表现需求
    • 如何在 iOS 中进行面向测试驱动开发和面向行为驱动开发
    • 如何制定一套适合自己团队的 iOS 编码规范
    • iOS 系统内核 XNU:App 如何加载
    • iOS 黑魔法 Runtime Method Swizzling 背后的原理
    • libffi:动态调用和定义 C 函数
    • iOS 是怎么管理内存的
    • 如何编写 Clang 插件
    • 打通前端与原生的桥梁:JavaScriptCore 能干哪些事情
    • React Native、Flutter 等,这些跨端方案怎么选
    • 原生布局转到前端布局,开发思路有哪些转变
    • iOS原生、大前端和Flutter分别是怎么渲染的
    • 剖析使 App 具有动态化和热更新能力的方案
  • Flutter
    • 0.Flutter学习笔记以及问题记录
    • 1.Dart基础快速入门
    • 2.什么是声明式UI
    • 3.Flutter入门基础知识
    • 4.项目结构、资源、依赖和本地化
    • 6.布局与列表
    • 7.状态管理
    • 8.路由与导航
    • 9.手势检测及触摸事件处理
    • 9.线程和异步UI
    • 10.主题和文字处理
    • 11.表单输入与富文本
    • 12.调用硬件、第三方服务以及平台交互、通知
    • 13.基于Http实现网络操作
    • 14.图片控件开发详解
    • 15.异步:Future与FutureBuilder实用技巧
    • 16.APP首页框架搭建-Scaffold与PageView
Powered by GitBook
On this page
  • 声明的属性和实例变量
  • 常量
  • 枚举常量
  • 通过const创建的常量
  • 其它类型的常量
  • 通知和异常

Was this helpful?

  1. Apple 官方开发指南
  2. Cocoa 代码指南

属性和数据类型命名

Previous函数命名Next可接受的缩写词和首字母缩写词

Last updated 5 years ago

Was this helpful?

这个部分介绍了声明的属性、实例变量、常量、通知和异常。

声明的属性和实例变量

属性的声明实际上是声明属性的读写方法,所以声明属性的命名约定大体上和读写方法的命名约定相同(参见)。如果属性是一个名词或者动词,格式是:

@property (…) type nounOrVerb;

例如:

@property (strong) NSString *title; @property (assign) BOOL showsAlpha;

如果声明属性是一个形容词,然而需要注意的是,属性名忽略掉“is”前缀,但是指定约定的get读取方法名,例如:

@property (assign, getter=isEditable) BOOL editable;

大多数情况下,当你使用一个声明的属性的时候,你同样需要 synthesize 一个相对应的实例变量。

确保实例变量的名字简明的描述存储的属性。通常情况下,你不能直接访问实例变量;而是要通过读写方法来访问(你可以在init和dealloc方法中直接访问实例变量)。为了更加显著,可以采用下划线来命名实例变量,例如:

@implementation MyClass {
BOOL _showsTitle;
}

如果你通过使用一个声明属性来synthesize一个实例变量的话,在@synthesize语句中指定实例变量的名字。

@implementation MyClass
@synthesize showsTitle=_showsTitle;

当向类中添加实例变量的时候,需要考虑以下几点:

  • 避免直接声明公共的实例变量。开发者应当关注的是对象的接口,而不是如何存储数据的细节。你可以通过使用声明属性以及synthesize相关的实例变量。

  • 如果你需要声明一个实例变量,避免用 @private 或者 @protected来声明。如果你想在子类中直接访问数据,可以使用@protected。

  • 如果一个实例变量是一个类实例的可访问属性,确保你给他写了读写方法(如果可能,请使用声明属性)。

常量

常量的命名规则与这个常量如何创建的有关。

枚举常量

  • 对于有整型常量的组来说,我们可以用枚举。

typedef enum _NSMatrixMode {
    NSRadioModeMatrix           = 0,
    NSHighlightModeMatrix       = 1,
    NSListModeMatrix            = 2,
    NSTrackModeMatrix           = 3
} NSMatrixMode;

注意类型定义的标签(例如上面的_NSMatrixMode)是不需要的。

  • 你可以创建一个诸如位掩码的没有名字的枚举类型。例如:

enum { NSBorderlessWindowMask = 0, NSTitledWindowMask = 1 << 0, NSClosableWindowMask = 1 << 1, NSMiniaturizableWindowMask = 1 << 2, NSResizableWindowMask = 1 << 3

}; </pre></code>

通过const创建的常量

  • 通过const创建浮点型值的常量。如果你的整型常量与其它常量无关的话,你可以使用const创建一个整型的值;否则请使用枚举类型。

  • 下面是一个const常量的命名格式的例子:

const float NSLightGray;

其它类型的常量

  • 一般来说,不要使用#define预处理器命令来创建常量。对于整型常量,请使用枚举。对于浮点型常量,请使用const修饰符。

  • 可以用大写符号做标记,这样预处理器就可以判断代码是否需要被处理。例如:

#ifdef DEBUG
  • 注意,由编译器定义的宏在头部和尾部有双下划线。例如:

__MACH__
  • 对于通知名和字典键,我们可以定义字符串常量。通过字符串常量,你可以确保编译器检验指定的正确的值(是指执行拼写检查)Cocoa框架提供许多字符串常量的例子,例如:

APPKIT_EXTERN NSString *NSPrintCopies;

实际上,NSString的值是赋值给一个实现文件中的常量的。(请注意,在Objective-C中,APPKIT_EXTERN宏是全局变量。)

通知和异常

通知和异常的命名约定遵守同样的规则。但是又有他们自己推荐的使用规则。

通知

如果一个类有一个代理,大多数的通知有可能通过代理中定义的代理方法来接收的。这些通知的名字应当显示相关的代码方法。例如,一个全局的 NSApplication代理对象自动注册接收一个applicationDidBecomeActive: 的消息,当application任何时候发送一个NSApplicationDidBecomeActiveNotification。

通知是通过全局的NSString对象来标识的,以以下方式来组合名字:

[Name of associated class] + [Did | Will] + [UniquePartOfName] + Notification

例如:

NSApplicationDidBecomeActiveNotification NSWindowDidMiniaturizeNotification NSTextViewDidChangeSelectionNotification NSColorPanelColorDidChangeNotification 

异常

异常是通过全局的NSString对象来标识的,以以下方式来组合名字:

[Prefix] + [UniquePartOfName] + Exception

名字唯一的部分,应当将组合的名字连在一起,并且每个单词的首字母大写,以下是一些例子:

NSColorListIOException NSColorListNotEditableException NSDraggingException NSFontUnavailableException NSIllegalSelectorException

枚举常量和类型定义组的命名约定遵循函数的命名(参见)。以下例子来自 NSMatrix.h:

如同常量枚举一样,对于函数的命名约定也是一样的(参见)。

尽管你可以选择任意意图来使用异常(就是说NSException类和相关函数提供的机制)但是Cocoa保留一些编程错误的异常,例如:数组索引越界异常。Cocoa不实用异常来处理普通的、可预料的异常。对于这种情况,会使用诸如nil、NULL、NO或者其他错误代码的返回值。更多细节,请参见 .

读写方法
函数的命名
函数命名
Error Handling Programming Guide