关于

1年前 阅读 310 评论 0 赞 0

Objective-C 风格指南

Objective-C 是 C 语言的扩展,增加了动态类型和面对对象的特性。它被设计成具有易读易用的,支持复杂的面向对象设计的编程语言。它是 Mac OS X 以及 iPhone 的主要开发语言。

Cocoa 是 Mac OS X 上主要的应用程序框架之一。它由一组 Objective-C 类组成,为快速开发出功能齐全的 Mac OS X 应用程序提供支持。

苹果公司已经有一份非常全面的 Objective-C 编码指南。Google 为 C++ 也写了一份类似的编码指南。而这份 Objective-C 指南则是苹果和 Google 常规建议的最佳结合。因此,在阅读本指南之前,请确定你已经阅读过:

  1. Note
  2. 所有在 Google C++ 风格指南中所禁止的事情,如未明确说明,也同样不能在Objective-C++ 中使用。

本文档的目的在于为所有的 Mac OS X 的代码提供编码指南及实践。许多准则是在实际的项目和小组中经过长期的演化、验证的。Google 开发的开源项目遵从本指南的要求。

Google 已经发布了遵守本指南开源代码,它们属于 Google Toolbox for Mac project 项目(本文以缩写 GTM 指代)。GTM 代码库中的代码通常为了可以在不同项目中复用。

注意,本指南不是 Objective-C 教程。我们假定读者对 Objective-C 非常熟悉。如果你刚刚接触 Objective-C 或者需要温习,请阅读 The Objective-C Programming Language

例子

都说一个例子顶上一千句话,我们就从一个例子开始,来感受一下编码的风格、留白以及命名等等。

一个头文件的例子,展示了在 @interface 声明中如何进行正确的注释以及留白。

  1. // Foo.h
  2. // AwesomeProject
  3. //
  4. // Created by Greg Miller on 6/13/08.
  5. // Copyright 2008 Google, Inc. All rights reserved.
  6. //
  7. #import <Foundation/Foundation.h>
  8. // A sample class demonstrating good Objective-C style. All interfaces,
  9. // categories, and protocols (read: all top-level declarations in a header)
  10. // MUST be commented. Comments must also be adjacent to the object they're
  11. // documenting.
  12. //
  13. // (no blank line between this comment and the interface)
  14. @interface Foo : NSObject {
  15. @private
  16. NSString *bar_;
  17. NSString *bam_;
  18. }
  19. // Returns an autoreleased instance of Foo. See -initWithBar: for details
  20. // about |bar|.
  21. + (id)fooWithBar:(NSString *)bar;
  22. // Designated initializer. |bar| is a thing that represents a thing that
  23. // does a thing.
  24. - (id)initWithBar:(NSString *)bar;
  25. // Gets and sets |bar_|.
  26. - (NSString *)bar;
  27. - (void)setBar:(NSString *)bar;
  28. // Does some work with |blah| and returns YES if the work was completed
  29. // successfully, and NO otherwise.
  30. - (BOOL)doWorkWithBlah:(NSString *)blah;
  31. @end

一个源文件的例子,展示了 @implementation 部分如何进行正确的注释、留白。同时也包括了基于引用实现的一些重要方法,如 getterssettersinit 以及 dealloc

  1. //
  2. // Foo.m
  3. // AwesomeProject
  4. //
  5. // Created by Greg Miller on 6/13/08.
  6. // Copyright 2008 Google, Inc. All rights reserved.
  7. //
  8. #import "Foo.h"
  9. @implementation Foo
  10. + (id)fooWithBar:(NSString *)bar {
  11. return [[[self alloc] initWithBar:bar] autorelease];
  12. }
  13. // Must always override super's designated initializer.
  14. - (id)init {
  15. return [self initWithBar:nil];
  16. }
  17. - (id)initWithBar:(NSString *)bar {
  18. if ((self = [super init])) {
  19. bar_ = [bar copy];
  20. bam_ = [[NSString alloc] initWithFormat:@"hi %d", 3];
  21. }
  22. return self;
  23. }
  24. - (void)dealloc {
  25. [bar_ release];
  26. [bam_ release];
  27. [super dealloc];
  28. }
  29. - (NSString *)bar {
  30. return bar_;
  31. }
  32. - (void)setBar:(NSString *)bar {
  33. [bar_ autorelease];
  34. bar_ = [bar copy];
  35. }
  36. - (BOOL)doWorkWithBlah:(NSString *)blah {
  37. // ...
  38. return NO;
  39. }
  40. @end

不要求在 @interface@implementation@end 前后空行。如果你在 @interface 声明了实例变量,则须在关括号 } 之后空一行。

除非接口和实现非常短,比如少量的私有方法或桥接类,空行方有助于可读性。

致谢
内容撰写:http://zh-google-styleguide.readthedocs.org/

更新日期 更新内容
2015-05-26 Objective-C 风格指南
你的支持将鼓励作者继续创作

评论(0)

(无)