多个类实例

时间:2013-03-28 13:26:14

标签: objective-c

同一个类(RandomClass)的instance1和instance2。

我想将instance1.string设置为@"instance 1 string"instance2.string设置为@"instance2 2 string",并以不同方式访问它们,但看起来就像我将instance2.string设置为instance1。字符串也会改变它的值。我正在使用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字符串值。

有没有办法分别创建不同的实例,将类对象作为唯一值处理(由它自己的实例访问)?

2 个答案:

答案 0 :(得分:0)

instance1instance2引用与[RandomClass sharedInstance]相同的对象。如果您修改其中任何一项,则所有更改都将对原始sharedInstance生效。

如果你想要两个不同的对象,你必须实例化两次(如果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'

(顺便说一下,RandomClass看起来像Singleton,因此可能无法实例化多个对象。)

答案 1 :(得分:0)

您的示例无效,因为您没有同一个类的两个实例,您只有一个单例实例。请注意,[RandomClass sharedInstance]始终返回相同的实例,您只有两个引用。

创建实例的常规方法是

[[RandomClass alloc] init...]

请不要在类和实例的上下文中使用术语thread,这只会使问题更加混乱。

我相信你应该首先访问一些Obj-C教程或一些OOP教程。

相关问题