2

クラス A とクラス B があるとします。クラス B はクラス A のサブクラスです。クラス A にはいくつかのプロパティが含まれており、クラス B はそのサブクラスに固有のプロパティを追加することによってクラス A スーパークラスを拡張します。クラス A オブジェクトを作成しましたが、クラス B によって提供される追加のプロパティにデータを追加できるように、実行時にオブジェクトをクラス B タイプのオブジェクトに変換したいと考えています。Objective-C でこれを行う方法はありますか? ありがとう!

4

3 に答える 3

3

クラスBに必要な追加プロパティを持つ引数としてクラスAを受け取るクラスBのコンストラクターを作成してみませんか。

そもそもクラスBを作ってみませんか?あなたがこれをしたいと思うのは少し奇妙に聞こえます。おそらく、クラスAとB、およびそれらで何をしているのかについて、より具体的な詳細を教えてください。

于 2010-02-13T08:09:40.677 に答える
1

クラス B のインスタンスはクラス A のインスタンスよりも大きいため、その場で変換することはできません (追加のプロパティが ivar に格納されていると仮定します)。Objective-C には、オブジェクトを再配置する機能がありません。

オブジェクトのコピーを作成することに満足している場合 (つまり、オブジェクトへの参照がない、またはそれらを更新できることが確実な場合)、Objective-C ランタイム関数を使用して次のようなことを行うことができます。

newB = object_copy(a, class_getInstanceSize(B));
object_setClass(newB, B);
object_dispose(a);
于 2010-02-13T08:28:35.923 に答える
0

最も簡単な方法は、クラス A の alloc を実際にクラス B を返すように置き換えることです。

@implementation ClassA (MyCategory)

+ (id)alloc
{
    if (self != [ClassB class])
        return [ClassB alloc];
    return [super alloc];
}

@end

もちろん、これを行うことは一般的に非常に悪い考えです。

于 2010-02-13T08:56:56.197 に答える