12-クラスの本質、クラスの起動プロセス(load,initialize)、SELタイプ

2247 ワード

クラスの本質

  • 本質
  • クラスは実は1つのオブジェクトで、このオブジェクトはこのクラスが初めて使用されたときに作成され、1つのクラスの再メモリには1つのクラスオブジェクト
  • しかありません.
  • クラスオブジェクトがある限り、将来的にはクラスオブジェクトによってインスタンスオブジェクト
  • を作成することができる.
  • インスタンスオブジェクトには、独自のクラスオブジェクトを作成する
  • を指すisa がある.
  • クラスオブジェクトには、現在のオブジェクトのすべてのオブジェクトメソッドが保存され、インスタンスオブジェクトにメッセージを送信すると、インスタンスオブジェクトのisaポインタに基づいて対応するクラスオブジェクトの
  • が検索される.
  • クラスオブジェクトの取得方法:[インスタンスオブジェクトclass]/[クラス名class];
  • クラスオブジェクトの適用シーン:
  • インスタンスオブジェクト
  • を作成するために使用する.
  • 2クラスメソッド
  • を呼び出すために使用される.

    クラスの開始プロセス

  • loadメソッド:
  • プログラムが起動すると、すべてのクラスのコードがメモリにロードされ、コード領域
  • に格納される.
  • loadメソッドは、現在のクラスがメモリにロードするときに呼び出され、
  • は1回のみ呼び出されます.
  • 継承関係がある場合は、親クラスのloadメソッドを呼び出し、子クラスのloadメソッド
  • を呼び出す.
  • initializeメソッド:
  • 現在のクラスが最初に使用すると(クラスオブジェクトが作成されたとき)
  • が呼び出されます.
  • initializeメソッドは、プログラム全体の実行中に1回のみ呼び出され、このクラスは何回使用しても1回だけ呼び出されます
  • .
  • initializeあるクラスを一度に初期化するための
  • .
  • initializeloadと同様に、継承関係がある場合は、親クラスのinitializeを呼び出し、子クラスのinitialize
  • を呼び出す.

    SELタイプ


    三つの使い方
  • オブジェクト/クラスを組み合わせて、オブジェクト/クラスにメソッド
  • が実装されているかどうかを確認する.
    SEL sel = @selector(setAge:);
    Person *p = [Person new];
    //  p - setAge: 
    //  P setAge: YES
    //  P setAge: NO
    BOOL flag = [p respondsToSelector:sel];
    NSLog(@"flag = %i", flag);
    
  • 2.オブジェクト/クラスと組み合わせてSELメソッド
  • を呼び出す
    SEL sel = @selector(demo);
    Person *p = [Person new];
    //  p sel 
    [p performSelector:sel];
        
    SEL sel1 = @selector(signalWithNumber:);
    // withObject:  
    //  :  performSelector ,  ,
    //  ,  withObject 
    [p performSelector:sel1 withObject:@"13838383438"];
        
    SEL sel2 = @selector(setAge:);
    [p performSelector:sel2 withObject:@(5)];
    NSLog(@"age = %i", p.age);
        
    //  :performSelector 2 
    SEL sel3 = @selector(sendMessageWithNumber:andContent:);
    [p performSelector:sel3 withObject:@"138383438" withObject:@"abcdefg"];
    
  • 3.コンビネーションオブジェクトSELタイプをメソッドとするパラメータ
  • Car *c = [Car new];
    SEL sel = @selector(run);
        
    Person *p = [Person new];
    [p makeObject:c andSel:sel];//  ,  c run