Есть несколько вопросов, которые похожи на это (например, 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];
Спасибо Нуно. Я просто добавил комментарий: время от времени я получаю странное исключение. Поэтому я думаю, что что-то не так ... – PJC