在同一个类的不同实例之间共享一个属性

时间:2010-03-05 22:42:02

标签: objective-c cocoa cocoa-touch

是否可以在objective-c中共享该类的所有实例中的一个类的一个参数:

@interface Class1 : NSObject {
    NSString* shared; /** shared among instance (this is not, but defined somehow) **/
    NSString* non_shared; /** other parameters non shared **/
}

在程序中,Class1的每个实例都有自己的non_shared变量(像往常一样),但是所有实例都访问相同的共享变量(当一个实例发生更改时,所有人都可以看到它)。

一种可能性是将变量隐藏为属性并在setter / getter函数中使用单例,但我不知道是否有一种简单的方法。

谢谢,  埃杜

1 个答案:

答案 0 :(得分:2)

类变量(在许多其他OOP语言中称为static)实际上在Objective-C中有点痛苦。您必须在类的模块(.m)文件中声明一个静态全局变量并引用该变量。您应该添加类级别的getter / setter来封装对静态全局变量的访问。你的getter可以分配/初始化一个对象,如果它在未归一化之前放在变量中,那么它就会返回它。

如果静态变量包含一个实例(例如示例中的NSString实例),则需要确保它不会多次进行alloc / initialized。如果您使用的是OS X 10.6或更高版本,请查看dispatch_once以确保单个初始化。