-1

同じクラス (RandomClass) の instance1 と instance2 があります。

instance1.stringas@"instance 1 string"instance2.stringasを設定し、それらに別の方法でアクセスしたいのですが@"instance2 2 string"、instance2.string を設定すると、instance1.string もその値を変更するように見えます。私は sharedInstance メソッドを使用しています。

何かのようなもの:

RandomClass *instance1 = [RandomClass sharedInstance];
instance1.string = @"instance 1 string";

RandomClass *instance2 = [RandomClass sharedInstance];
instance2.string = @"instance 2 string";

NSLog(@"%@", instance2.string); // wich results 'instance 2 string'    
NSLog(@"%@", instance1.string); // wich results 'instance 2 string'

ご覧のとおり、instance2.string は instance1 文字列値を変更します。

クラス オブジェクトを一意の値として処理する (独自のインスタンスによってアクセスされる) 異なるインスタンスを個別に作成する方法はありますか?

4

2 に答える 2

0

instance1instance2は と同じオブジェクトを参照しています[RandomClass sharedInstance]。それらのいずれかを変更すると、すべての変更が元の に反映されますsharedInstance

2 つの異なるオブジェクトが必要な場合は、2 回インスタンス化する必要があります (RandomClass初期化メソッドを提供する場合)。

RandomClass *instance1 = [[RandomClass alloc] init];
instance1.string = @"instance 1 string";

RandomClass *instance2 = [[RandomClass alloc] init];
instance2.string = @"instance 2 string";

NSLog(@"%@", instance1.string); // wich results 'instance 1 string'    
NSLog(@"%@", instance2.string); // wich results 'instance 2 string'

(ちなみに、SingletonRandomClassのように見えるので、複数のオブジェクトをインスタンス化する方法はないかもしれません。)

于 2013-03-28T13:28:18.283 に答える
0

同じクラスのインスタンスが 2 つなく、シングルトン インスタンスが 1 つしかないため、この例は有効ではありません。常に同じインスタンスを返すことに注意してください[RandomClass sharedInstance]。参照は 2 つしかありません。

インスタンスを作成する通常の方法は、

[[RandomClass alloc] init...]

クラスとインスタンスのコンテキストでこの用語を使用しないでくださいthread。これは、問題をより混乱させるだけです。

最初に Obj-C チュートリアルまたは OOP チュートリアルにアクセスする必要があると思います。

于 2013-03-28T13:28:51.267 に答える