Objective-C:运行时的类变量?

时间:2014-09-19 10:11:31

标签: objective-c

有几个问题似乎与此类似(例如Objective C Static Class Level variables)并且我读过,但我仍然感到困惑。值得注意的是,对于initialize的调用,各种答案似乎有所不同。

我有一个班级Foo。在运行时,我的应用程序询问后端以找出Foo应使用的“类参数”(即这些参数将在Foo的所有实例之间共享)。我知道如何处理后端等。但我不知道我的Objective-C方法是否正确。我应该说:它确实有效。但又一次:我不确定我在做什么。

编辑: 我认为它有效。但有时,我得到一个奇怪的例外: libsystem_platform.dylib _os_lock_recursive_abort

当我分配/初始化NSDictionary时,它会在初始化时发生。

Foo.h:

+ (NSDictionary *)parameters;
+ (void)setParameters:(NSDictionary *)params;

Foo.m:

static NSDictionary *parameters = nil;

@implementation Foo

+ (NSDictionary *)parameters{
    return parameters;
}

+ (void)setParameters:(NSDictionary *)params
{
    parameters = params;
}

+ (void)initialize
{
    [super initialize];
    if ((self == [Foo self]) && !parameters) // Is this right??
        parameters = [[NSDictionary alloc] init];
}

@end

... somewhere else, in another class ...

[Foo setParameters:dictionaryOfParams]; 

1 个答案:

答案 0 :(得分:1)

只是一个小小的改进。

根据Apples + (void)initialize文档:

  

每个类只调用一次初始化。

当您从子类调用它时忽略initialize,您可以从If条件中删除!parameters。因为您确定它只会运行一次。