最近、「CocoaDesignPatterns」を読んでいました。KVCについて話すとき、「KVCは-< key >または-get < Key >という名前のアクセサーが最初に存在するかどうかを確認し、存在しない場合は、< key >または_< key >という名前のインスタンス変数を試行します」と述べています。obj-cランタイムはインスタンス変数が存在するかどうかをチェックできますか?コンパイル時にしかできないと思います...
どんな答えでも大歓迎です^_^
最近、「CocoaDesignPatterns」を読んでいました。KVCについて話すとき、「KVCは-< key >または-get < Key >という名前のアクセサーが最初に存在するかどうかを確認し、存在しない場合は、< key >または_< key >という名前のインスタンス変数を試行します」と述べています。obj-cランタイムはインスタンス変数が存在するかどうかをチェックできますか?コンパイル時にしかできないと思います...
どんな答えでも大歓迎です^_^
それは確かにできます。これに関連するドキュメントは、Objective-C ランタイム リファレンスです。具体的には、class_getInstanceVariable
. NULL
ドキュメントが省略している部分は、クラスのインスタンスにそのような変数がない場合にその関数が戻ることです。
おそらく、KVC はオブジェクトのクラスと候補の変数名をその関数に渡し、ランタイムが最初に思いついた名前をIvar
使用します。