2014-09-19 3 views
0

Есть несколько вопросов, которые похожи на это (например, Objective C Static Class Level variables) и что я читаю, но я все еще смущен. Примечательно, что различные ответы по-разному имеют дело с призывом к initialize.Objective-C: переменная класса во время выполнения?

У меня есть класс Foo. Во время выполнения мое приложение запрашивает исходный код, чтобы узнать, какие «параметры класса» следует использовать для Foo (т. Е. Эти параметры будут совместно использоваться во всех экземплярах Foo). Я знаю, как работать с back-end и т. Д. Но я не знаю, правильно ли работает мой подход Objective-C. Я должен сказать: он работает. Но опять же: я не уверен, что делаю.

EDIT:Я думал, это сработало. Но время от времени я получаю странное исключение: 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

Просто незначительное улучшение.

Согласно яблоки + (void)initialize документации:

инициализации вызывается только один раз в классе.

Как вы игнорируете initialize, когда она вызывается из подкласса можно удалить !parameters из условия If. Потому что вы точно знаете, что он будет работать только один раз.

+0

Спасибо Нуно. Я просто добавил комментарий: время от времени я получаю странное исключение. Поэтому я думаю, что что-то не так ... – PJC

Смежные вопросы