OC基本構文(1)

3184 ワード

1、クラス
  • 宣言1、クラス名の最初のアルファベットは大文字でなければならない.2、下線を引いてはいけません.3、複数の英語の単語はアルパカで表記されている.4、実例方法はマイナス記号-で始まり、クラス方法は+で始まる.5、OCメソッドの任意のデータ型は()で拡張する必要があります.OCメソッドのカッコ():データ型6を拡張するために1つの役割しかありません.宣言は@interfaceと@endの間で行われます.
  • #import  //      NSObject
    @interface Car : NSObject    // NSObject   : Car            
    {
        @public  // @public   ,                      
        int wheels; //       
        int speed; //    xxkm/h    
        //                
    }
    - (void)run;  //       
    + (void)runWith:(NSString *) p1 andWith:(NSString *)p2 //       
    @end
    
  • 実装実装実装実装@implementationと@endの間で
  • を行う.
    @implementation Car
    - (void)run
    {
        NSLog(@"      !");  //        
    }
    @end
    

    2、ポイント構文とidポインタ
    1、ポイント構文の本質は、メンバー変数にアクセスするのではなく、メソッドの呼び出しであり、ポイント構文を使用すると、コンパイラは自動的に対応するメソッドに展開されます.2、ポイント構文の本質は、対応するsetメソッドとgetメソッドに変換することであり、setメソッドとgetメソッドがなければ、ポイント構文は使用できません.3、デッドサイクルを避け、この書き方を避ける:(1)setメソッドではself.age=age;すなわち[self setAge:age];(2)getメソッドではreturn self.age;すなわち[self age];4、idは万能ポインタであり、OCオブジェクトを指向または操作することができる.注意:idの後ろに*を付けないでください.
    3、キーワード
    @propertyと@synthesize
    1、@propertyキーワードは、メンバー変数のsetterメソッドとgetterメソッドの宣言を自動的に生成します.2、@synthesizeキーワードは、メンバー変数のsetterメソッドとgetterメソッドの生成を支援します.
    @property int age;
    //         ,          :
    - (void)setAge:(int)age;
    - (int)age;
    //   :
    @synthesize age = _age;
    //         :
    - (void)setAge:(int)age
    {
      _age = age;
    }
    
    - (int)age
    {
      return  _age;
    }
    

    3、手動でsetterメソッドを実現すると、コンパイラはgetterメソッドと存在しないメンバー変数しか自動的に生成されません.手動でgetterメソッドを実装すると、コンパイラはsetterメソッドと存在しないメンバー変数のみを自動的に生成します.setterとgetterメソッドを同時に手動で実現すると、コンパイラは存在しないメンバー変数を自動的に生成しません.4、Xcode 4から.4後、@propertyは@synthesizeの機能を独占し、すなわち、@propertyはsetterとgetterの宣言と実装を同時に生成することができ、デフォルトではsetterとgetterメソッドの実装は、下線_にアクセスします.先頭のメンバー変数.5、@propertyパラメータ
  • メモリ管理に関するパラメータ
  • retain:release旧値、retain新値(OCオブジェクトタイプに適用)、参照アドレスレプリケーション
  • assign:直接割り当て(デフォルト、非OCオブジェクトタイプに適用)、つまり基本データ型の割り当てのデフォルトにはassignパラメータ
  • があります.
  • copy:release旧値、copy新値、値レプリケーション
  • setメソッド
  • を生成するかどうか
  • readwrite:setterとgetterの宣言と実装を同時に生成する
  • readonly:getterの宣言と実装
  • のみが生成されます.
  • マルチスレッド管理
  • nonatomic:性能が高い(一般的にはこれを使う)
  • atomic:パフォーマンスが低い(デフォルト)
  • setterメソッドとgetterメソッドの名前
  • setter:setメソッドの名前が決定されました.必ずコロンがあります.
  • getter:getメソッドの名前(一般的にBOOLタイプで用いられるgetメソッド)を決定する
  • @protocal(TSの抽象クラス)
    1、多くのメソッドを宣言するために使用できます(メンバー変数を宣言できません).2、クラスがこのプロトコルを遵守している限り、このプロトコルのすべてのメソッド宣言を持つことになります.3、親がプロトコルを遵守している限り、サブクラスも遵守しています.4、プロトコルを定義します.
    @protocol        //     
    
      //       ....
    
     @end
    

    5、契約を守る
    @interface    :     
    
     @end
    

    instancetype
    関連付けられていない戻りタイプのメソッドをクラスのタイプに戻すのは、指定されたメソッドの戻り値であり、チェーン呼び出しに似ています.
    @interface NSArray
    +(id)constructAnArray;
    @end
    [NSArray constructAnArray]  //       id
    
    @interface NSArray
    +(instancetype)constructAnArray;
    @end
    [NSArray constructAnArray]  //       NSArray
    

    4、仕分け(先端の飾り)
    1、あるクラスにいくつかの方法を拡張することができる(元のクラスのコードを修正しない)2、文法:
    //   
    @interface   (    )
    
    @end
    
    //   
    
    @implementation   (    )
    
    @end