-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

instance1并且instance2引用与 相同的对象[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,所以可能没有办法实例化多个对象。)

于 2013-03-28T13:28:18.283 回答
0

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

创建实例的正常方法是

[[RandomClass alloc] init...]

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

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

于 2013-03-28T13:28:51.267 回答