私があなたの目標を正しく理解していれば、クラスの既存のインスタンスに新しいプロパティを追加したいと考えています。したがって、サブクラスを定義して間違った方法で「キャスト」しようとする考えです。指摘されているように、あなたはそれを行うことはできません。
目的の新しいプロパティを持つ別のクラスに既存のインスタンスをラップすると、プロパティとインスタンスの 2 つがバインドされますが、ラッパー クラスのインスタンスとしてバインドされます。ラッパーを使用して目標を達成できます。プロパティと既存のクラスへの参照の両方でサブクラスを定義し、キャプチャされたインスタンスにメソッドを転送します (つまり、プロキシを構築します)。
では、目標を達成するために Objective-C が提供するものは何でしょうか?
Objective-C は、既存のクラスに追加のメソッドを追加できるカテゴリをサポートしているため、既存のクラスのすべてのインスタンスをサポートしています。
しかし、メソッドを追加するのではなく、int
. int
ただし、プロパティを定義できます。デフォルトでは、プロパティは2つのメソッドといくつかのストレージです(あなたの場合はint
. カテゴリはメソッドを提供するので、必要なのはストレージだけです...
関連オブジェクトを入力します。Objective-C は、任意の数のオブジェクトを別のオブジェクトに関連付けることをサポートします。関連付けられた各オブジェクトは一意のキーによって識別されます。事実上、Objective-C は関連付けられたオブジェクトの辞書を提供します。オブジェクトはストレージを提供します...
したがって、概要では、次のことができます
a)int
プロパティを持つクラスを宣言します-それを呼び出しますMyAddedProperties
b) でカテゴリを定義します。CCSprite
たとえばMyAddedPropertiesCategory
、プロパティも提供しますint
。このプロパティのセッターとゲッターを手動で実装して、そのプロパティのルックアップと関連付けられたインスタンスをMyAddedProperties
設定/取得しint
ます。
これで、既存のクラスにプロパティが追加されました!
(b)MyAddedProperties
カテゴリ セッター/ゲッターの最初の呼び出しでのインスタンスを作成して関連付け、関連付けられたオブジェクトの一意のキーを定義する必要があります。キーを検索して前者を実行し、関連付けられたオブジェクトがない場合は作成します。一意のキーは、任意のタイプの値、void *
つまりアドレスです。一意のキーを取得する標準的な方法はstatic
、カテゴリで変数 (任意の型で、そのアドレスのみが使用される) を宣言し、そのアドレスをキーとして使用することです。
カテゴリについてはこちらで、関連するオブジェクトについてはこちらで読むことができます。
それは多くのコードではありません。ソリューションの作成に問題がある場合は、新しい質問をして、コードと問題の原因を教えてください。
HTH