2012-04-22 7 views
0

Objective-Cでの静的型付けのパフォーマンス上の利点はありますか?安全性チェックのためだけに存在しますか?Objective-Cでの静的型付けのパフォーマンス上の利点

+0

objcに静的な型指定はありません。すべて動的です。 静的言語が必要な場合は、C++を使用します。 –

+0

@ RichardJ.RossIII:それは本当ですか? Objective-Cの入力規則は、Appleドキュメントのとおり、Static、Dynamic、Weakです。あなたは明確にしていただけますか? – Chandu

+0

@Chanduはランタイムには、すべてが単なるオブジェクトであり、 "タイプ"という概念はありません。あなたは、(おそらくブロック以外の)任意の型にポインタをキャストすることができます。そして、それはクラスに基づいて正しいメソッド実装を呼び出します。さて、このうちのいくつかはARCの方が厳しくなりましたが、ほとんどの場合、言語の唯一の「静的な」部分はコンパイル時に警告として行われ、実行時に*決して*失敗しないキャストで修正できますJavaやC#のような「真の」静的言語とは異なります。 –

答えて

1

はい、安全確認用です。

Objective-Cメッセージ(メソッド呼び出し)は、実行時に常に動的にディスパッチされます。追加の静的型情報を追加すると、コンパイラがエラーを警告するのに役立ちますが、(ほとんどの場合)生成されたコードには影響しません。 http://en.wikipedia.org/wiki/Objective-C#Dynamic_typing

+0

これはコンパイラによって異なりますか? – Gabe

+1

静的な型付けが生成されたコードに影響を与えないことは完全には真実ではありません。複数の同一のセレクタが異なる型を返すことは可能です。この場合、レシーバの静的型付けによって、objc_msgsend_stret()またはobjc_msgsend_fpret()などの使用するobjc_msgsend()の特定のフレーバが決まります。 –

+0

@Jay - 良い点;それに応じて編集します –

関連する問題