0

Ruby では、任意のオブジェクトに対してメソッドを定義できます。

jack = "jack"
def jack.say_hi
 puts "hi, I'm #{self}"
end
jack.say_hi

Objective-Cで同じことをすることは可能ですか? どのように?

4

1 に答える 1

5

簡単な答え: いいえ。

クラスの特定のインスタンスにメソッドを動的に追加する簡単な方法はありません。動的に実行する要件と 1 つのインスタンスに対してのみ実行する要件の両方を削除すると、カテゴリを使用できます。これは、既存のクラスにメソッドを追加するコンパイル時の方法であり、そのクラスのすべてのインスタンスです。

複雑な答え: はい。

Objective-C では、ランタイムはほぼすべてのことを行う関数のセットを提供します。その場で新しいクラスを作成し、それらにメソッドを追加し、インスタンスのクラスを動的に変更できます。このような機能を使用すると、Ruby コードと同等のものを実現できます。Objective-C のキー値監視(KVO) メカニズムは、これらの機能に基づいて構築されています。

ランタイム関数をこのように使用することは簡単なことではありません。Objective-C と Ruby はこの分野で異なるモデルを持っていることを受け入れ、Objective-C 言語モデルを使用してやりたいことを再設計することをお勧めします。ただし、このルックアップを実際に試してみたい場合は、「Objective-C ランタイム リファレンス」を参照してください。

HTH

于 2013-07-04T04:03:39.577 に答える