關(guān)于Google Objective-C 的簡(jiǎn)單指南

2018-09-19 10:27 更新

Objective-C 風(fēng)格指南

Objective-C 是 C 語(yǔ)言的擴(kuò)展,增加了動(dòng)態(tài)類型和面對(duì)對(duì)象的特性。它被設(shè)計(jì)成具有易讀易用的,支持復(fù)雜的面向?qū)ο笤O(shè)計(jì)的編程語(yǔ)言。它是 Mac OS X 以及 iPhone 的主要開(kāi)發(fā)語(yǔ)言。

Cocoa 是 Mac OS X 上主要的應(yīng)用程序框架之一。它由一組 Objective-C 類組成,為快速開(kāi)發(fā)出功能齊全的 Mac OS X 應(yīng)用程序提供支持。

蘋(píng)果公司已經(jīng)有一份非常全面的 Objective-C 編碼指南。Google 為 C++ 也寫(xiě)了一份類似的編碼指南。而這份 Objective-C 指南則是蘋(píng)果和 Google 常規(guī)建議的最佳結(jié)合。因此,在閱讀本指南之前,請(qǐng)確定你已經(jīng)閱讀過(guò):

Note
所有在 Google 的 C++ 風(fēng)格指南中所禁止的事情,如未明確說(shuō)明,也同樣不能在Objective-C++ 中使用。

本文檔的目的在于為所有的 Mac OS X 的代碼提供編碼指南及實(shí)踐。許多準(zhǔn)則是在實(shí)際的項(xiàng)目和小組中經(jīng)過(guò)長(zhǎng)期的演化、驗(yàn)證的。Google 開(kāi)發(fā)的開(kāi)源項(xiàng)目遵從本指南的要求。

Google 已經(jīng)發(fā)布了遵守本指南開(kāi)源代碼,它們屬于 Google Toolbox for Mac project 項(xiàng)目(本文以縮寫(xiě) GTM 指代)。GTM 代碼庫(kù)中的代碼通常為了可以在不同項(xiàng)目中復(fù)用。

注意,本指南不是 Objective-C 教程。我們假定讀者對(duì) Objective-C 非常熟悉。如果你剛剛接觸 Objective-C 或者需要溫習(xí),請(qǐng)閱讀 The Objective-C Programming Language

例子

都說(shuō)一個(gè)例子頂上一千句話,我們就從一個(gè)例子開(kāi)始,來(lái)感受一下編碼的風(fēng)格、留白以及命名等等。

一個(gè)頭文件的例子,展示了在 @interface 聲明中如何進(jìn)行正確的注釋以及留白。

    //  Foo.h
    //  AwesomeProject
    //
    //  Created by Greg Miller on 6/13/08.
    //  Copyright 2008 Google, Inc. All rights reserved.
    //

    #import <Foundation/Foundation.h>

    // A sample class demonstrating good Objective-C style. All interfaces,
    // categories, and protocols (read: all top-level declarations in a header)
    // MUST be commented. Comments must also be adjacent to the object they're
    // documenting.
    //
    // (no blank line between this comment and the interface)
    @interface Foo : NSObject {
     @private
      NSString *bar_;
      NSString *bam_;
    }

    // Returns an autoreleased instance of Foo. See -initWithBar: for details
    // about |bar|.
    + (id)fooWithBar:(NSString *)bar;

    // Designated initializer. |bar| is a thing that represents a thing that
    // does a thing.
    - (id)initWithBar:(NSString *)bar;

    // Gets and sets |bar_|.
    - (NSString *)bar;
    - (void)setBar:(NSString *)bar;

    // Does some work with |blah| and returns YES if the work was completed
    // successfully, and NO otherwise.
    - (BOOL)doWorkWithBlah:(NSString *)blah;

    @end

一個(gè)源文件的例子,展示了 @implementation 部分如何進(jìn)行正確的注釋、留白。同時(shí)也包括了基于引用實(shí)現(xiàn)的一些重要方法,如 getterssetters 、 init 以及 dealloc 。

    //
    //  Foo.m
    //  AwesomeProject
    //
    //  Created by Greg Miller on 6/13/08.
    //  Copyright 2008 Google, Inc. All rights reserved.
    //

    #import "Foo.h"

    @implementation Foo

    + (id)fooWithBar:(NSString *)bar {
      return [[[self alloc] initWithBar:bar] autorelease];
    }

    // Must always override super's designated initializer.
    - (id)init {
      return [self initWithBar:nil];
    }

    - (id)initWithBar:(NSString *)bar {
      if ((self = [super init])) {
        bar_ = [bar copy];
        bam_ = [[NSString alloc] initWithFormat:@"hi %d", 3];
      }
      return self;
    }

    - (void)dealloc {
      [bar_ release];
      [bam_ release];
      [super dealloc];
    }

    - (NSString *)bar {
      return bar_;
    }

    - (void)setBar:(NSString *)bar {
      [bar_ autorelease];
      bar_ = [bar copy];
    }

    - (BOOL)doWorkWithBlah:(NSString *)blah {
      // ...
      return NO;
    }

    @end

不要求在 @interface@implementation@end 前后空行。如果你在 @interface 聲明了實(shí)例變量,則須在關(guān)括號(hào) } 之后空一行。

除非接口和實(shí)現(xiàn)非常短,比如少量的私有方法或橋接類,空行方有助于可讀性。

致謝
內(nèi)容撰寫(xiě):http://zh-google-styleguide.readthedocs.org/

更新日期更新內(nèi)容
2015-05-26Objective-C 風(fēng)格指南
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)