良いコード習慣を身につける

5358 ワード

美化コード
  • はtabを使用せずにスペースのみを使用し、2つのスペースを一度にインデントします.xcodeは自動的にタブをスペースに置き換えるように設定し、2スペース
  • にインデントする必要があります.
  • メソッドのカッコと他のカッコ(if/else/switch/whileなど)は常に同じ行で開始し、新しい行で
  • を終了する.
  • できるだけあなたのコードを80列以内に維持し、Xcode>Preferences>Text Editing>Show page guideを設定することで、境界を越えて発見されやすくなります.
  • if文は省略しない{}
  • メソッド名とメソッドタイプ(-/+記号)の間には、
  • のスペース間隔を置く必要があります.
  • @publicおよび@privateアクセス修飾子は、スペースでインデントする必要があります.
  • メソッドの呼び出しは、すべてのパラメータの1行、または各パラメータの1行、およびコロンが保証され、最初のキーワードが他のものより短い場合、次の行に少なくとも4つのスペースのインデント
  • が保証される.
    ベストプラクティス
  • ユーダ式
  • は使用しないでください.
    //         jidi  ,               ,         
    if ([@8 isEqual:a]) //   
    if ([a isEqual:@8]) //   
    
  • YES,NO,Nilの値と比較しないでください
  • if (great == YES) //  
    if (great)        //  
    
  • ifネストを過度に使用するにすぎず、returnでifネスト
  • を減らすことができる場合がある.
    - (void)someMethod {
      if (![someOther boolValue]) {
          return;
      }
      //Do something important
    }
    
  • 複雑な式は、複数の意味がより明確な文
  • を分割すべきである.
  • 三元演算子?コードをより明確にするために使用されるべき場所
  • 注意stong,weak,copy,assignの正しい使用
  • cの使用をできるだけ避ける基本タイプ、例えば:
  •   int -> NSInteger
      unsigned -> NSUInteger
      float -> CGFloat
           -> NSTimeInterval
      enum -> NS_ENUM
    
  • は、特定のパラメータの条件が満たされていない場合、NSParameterAssert()を使用して条件が成立するか、または異常
  • が投げ出されるかを断言するパラメータ断言を合理的に使用する.
  • ファクトリメソッドまたはクラスコンストラクタメソッドでは、戻りタイプはidタイプではなくinstancetypeを使用する必要があり、メソッドでは[[xxx class]alloc]init]メソッドを使用してオブジェクトを構築する必要があり、[[XXClass alloc]init]
  • を使用しない
  • は、init deallocの方法でgetter、setterを使用しないでください.プロパティなどは、インスタンス変数
  • に直接アクセスする必要があります.
  • 類の構成方法(init方法)はDesignated Secondaryの原則を遵守する必要がある.これはswiftにおいてinitとconvenienceの構造方法が強制的に規定されている.
  • designated               ,      , secondary            ,                   designated     
    
  • あなたのdesignated initializerを定義し、直接スーパークラスのdesignated initializerが呼び出されていることを確認します.
  • 直接スーパークラスのdesignated initializerを再ロードします.新しいdesignated initializerを呼び出します.
  • 新しいdesignated initializerのドキュメントを作成します.
  • designated initializerからsecondary initializer
  • を呼び出さない
  • 初期化モードの合理的な使用(クラスタ、単例)
  • に注意
  • 怠惰負荷Lazy loading
  • を合理的に使用
                    ,                               ,       getter         
    
  • クラスの等価性を書き換えるにはisEqualとhashメソッド
  • を同時に実現する必要がある.
  • 定数は静的定数の宣言を推奨し、外部に露出する場合はexternキーワードを使用します.たとえば、
  • extern NSString *const ZOCCacheControllerDidClearCacheNotification;
    static NSString * const ZOCCacheControllerDidClearCacheNotification = @"ZOCCacheControllerDidClearCacheNotification";
    
  • 自分のNSNotificationを定義するときは、通知の名前を文字列定数
  • として定義する必要があります.
    // Foo.h
    extern NSString * const ZOCFooDidBecomeBarNotification
    // Foo.m
    NSString * const ZOCFooDidBecomeBarNotification = @"ZOCFooDidBecomeBarNotification";
    
  • objcでは、コードブロックの特性を合理的に使用することができ、局所変数をより明確にすることができる
  • .
    //               ,         
    NSURL *url = ({
        NSString *urlString = [NSString stringWithFormat:@"%@/%@", baseURLString, endpoint];
        [NSURL URLWithString:urlString];
    });
    
  • Pragma Mark区分の合理的な使用:異なる機能グループの方法、protocolsの実現、親メソッドの書き換え、Viewのライフサイクル、カスタムアクセサ、
  • メソッド注釈は/**で始まることが好ましく、改行後の最初の文の書き方の一言で記述し、空白の行の後に残りの記述を書く場合は、引用符ではなく|を使用して注釈の変数名および記号名を参照することもでき、例えば// Sometimes we need |count| to be less than zero.
  • .
  • 関数定義のblockパラメータはできるだけ最後のパラメータに置くべきで、提供する必要があるデータとエラー情報を個別のblockに統合し、それぞれ成功と失敗を提供するblockよりも
  • 良い.
    - (void)downloadObjectsAtPath:(NSString *)path
                       completion:(void(^)(NSArray *objects, NSError *error))completion;
    
  • 関数定義のerrorパラメータは、可能な限り方法関数の最後の関数であり、データが空である場合、errorはnilではなく、errorは空ではなく、データが空である必要があります.
  • block合理的使用self,weakself,strongSelf
  •     :  block       self,    block     self     weakSelf,     strongSelf
    
  • block 1行でブロックを書き終えることができる場合は、改行する必要はありません.ブロック内のコードは4スペースでインデントする必要があります.果物のブロックは長すぎます.例えば、20行を超える場合は、ローカル変数として定義してから、この変数を使用することをお勧めします.
  • newメソッドを使用してオブジェクトを作成しない
  • ネーミング仕様
    メソッドの名前:
  • and接続パラメータを使用しないでください.最初のパラメータはwithを使用することができます.動詞があればforを使用することができます.依頼用did、willは状態
  • を表します.
  • メソッドがオブジェクトに動作を実行させることを示す場合、動詞ヘッダを使用して
  • と命名する.
  • categoryメソッドの前に、自分の小文字の接頭辞と下線を付けます.たとえば-(id)zoc_myCategoryMethod
  • メソッドの定義は、1行に非常に多くのパラメータがある場合、より良い方法は、各パラメータを個別に1行に分解することです.複数行を使用する場合は、各パラメータの前のコロンを揃え、最初のキーワードが他のものより短い場合は、次の行に少なくとも4つのスペースのインデント
  • が保証されます.
    クラス、プロトコルの名前付け
  • クラス名は3つの大文字を接頭辞(二文字接頭辞はAppleのクラス予約)、頭文字
  • であるべきである.
  • メソッド名頭文字小文字
  • 変数名頭文字小文字、プライベート変数名は「」接尾辞としては、例えばmyInstanceVariable_
  • .
  • 定数ネーミングは、アルファベット'k'を接頭辞として使用することができる
  • サブクラスネーミングは、例示的な部分を接頭辞と親クラス名の中間に置くべきであり、例えばZOCNetworkClient => ZOCTwitterNetworkClient
  • である.
    ツールバーの
  • プロパティは、略語を避け、アルファベットの先頭にあるアルパカの名前をできるだけ記述的に命名する必要があります.*記号は、NSString *text
  • などの名前に近づきます.
  • 属性は可能な限り使用する.シンボルコール
  • 属性定義配列順序:原子性、読み書き性、メモリ管理、例えば@property (nonatomic, readwrite, copy) NSString *name;
  • プライベート属性は、インプリメンテーションファイルに定義される.
  • ##   
    -   [objc   ](https://github.com/oa414/objc-zen-book-cn/)
    -   [Google          - objc](http://zh-google-styleguide.readthedocs.org/en/latest/google-objc-styleguide/contents/)