有几个问题似乎与此类似(例如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];
答案 0 :(得分:1)
只是一个小小的改进。
根据Apples + (void)initialize
文档:
每个类只调用一次初始化。
当您从子类调用它时忽略initialize
,您可以从If条件中删除!parameters
。因为您确定它只会运行一次。