iOSの知識点-19.Objective-CとSwiftの動的特性に対する理解について述べる
1244 ワード
Swift vs. Objective-C Objective-CとSwiftの動的特性に対する理解 について述べる
runtimeは実はObjective-Cのダイナミックメカニズムです.runtimeはコンパイルされたコードを実行します.この場合、オブジェクトを動的にロードしたり、メソッドを追加したり、属性を変更したり、情報を渡したりすることができます.具体的な手順はObjective-Cでオブジェクト呼び出しメソッドの場合,[self.tableview reload]のように2つのことが起こった.コンパイルフェーズでは、コンパイラはこの文を 運転段階、受信者self.tableviewはこのメッセージに応答し、その間に直接実行したり、メッセージを転送したり、メソッドがクラッシュしたりする可能性があります.
したがって、プロセス全体は、コンパイラコンパイル->受信者にメッセージを送信->受信者がメッセージに応答する3つのプロセスです.
[self.tableview reload]のようにself.tableviewは受信者でありreloadはメッセージであるため,メソッド呼び出しのフォーマットはコンパイラから見れば[receiver message]である.
受信者がコードにどのように応答するかは、実行時に発生します.runtimeはコンパイルされたコードを実行します.この場合、オブジェクトを動的にロードしたり、メソッドを追加したり、属性を変更したり、情報を渡したりすることができます.runtimeの実行メカニズムはObjective-Cの動的特性です.
Swiftは現在、静的言語として公認されている.そのダイナミック特性はすべてブリッジOCによって実現される.ダイナミックプロパティをもっとSwiftと書く場合は、OCのreflectionのようにprotocolで処理できます.
Swiftには次のように書くことができます.
前の問題
目次
の最後の部分
runtimeは実はObjective-Cのダイナミックメカニズムです.runtimeはコンパイルされたコードを実行します.この場合、オブジェクトを動的にロードしたり、メソッドを追加したり、属性を変更したり、情報を渡したりすることができます.具体的な手順はObjective-Cでオブジェクト呼び出しメソッドの場合,[self.tableview reload]のように2つのことが起こった.
objc_msgSend(self.tableview, @selector(reload))
に翻訳し、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()
* }
前の問題
目次
の最後の部分