iOSの知識点-19.Objective-CとSwiftの動的特性に対する理解について述べる

1244 ワード

Swift vs. Objective-C
  • Objective-CとSwiftの動的特性に対する理解
  • について述べる
    runtimeは実はObjective-Cのダイナミックメカニズムです.runtimeはコンパイルされたコードを実行します.この場合、オブジェクトを動的にロードしたり、メソッドを追加したり、属性を変更したり、情報を渡したりすることができます.具体的な手順はObjective-Cでオブジェクト呼び出しメソッドの場合,[self.tableview reload]のように2つのことが起こった.
  • コンパイルフェーズでは、コンパイラはこの文をobjc_msgSend(self.tableview, @selector(reload))に翻訳し、selfにメッセージを送信する.tableview.
  • 運転段階、受信者self.tableviewはこのメッセージに応答し、その間に直接実行したり、メッセージを転送したり、メソッドがクラッシュしたりする可能性があります.

  • したがって、プロセス全体は、コンパイラコンパイル->受信者にメッセージを送信->受信者がメッセージに応答する3つのプロセスです.
    [self.tableview reload]のようにself.tableviewは受信者でありreloadはメッセージであるため,メソッド呼び出しのフォーマットはコンパイラから見れば[receiver message]である.
    受信者がコードにどのように応答するかは、実行時に発生します.runtimeはコンパイルされたコードを実行します.この場合、オブジェクトを動的にロードしたり、メソッドを追加したり、属性を変更したり、情報を渡したりすることができます.runtimeの実行メカニズムはObjective-Cの動的特性です.
    Swiftは現在、静的言語として公認されている.そのダイナミック特性はすべてブリッジOCによって実現される.ダイナミックプロパティをもっとSwiftと書く場合は、OCのreflectionのようにprotocolで処理できます.
    * if ([someImage respondsToSelector:@selector(shake)]) {
    *   [someImage performSelector:shake];
    * }
    

    Swiftには次のように書くことができます.
    * if let shakeableImage = someImage as? Shakeable {
    *   shakeableImage.shake()
    * }
    

    前の問題
    目次
    の最後の部分