Когда вы сохраняете ссылку на объект в статической переменной, вам нужно убедиться, что он не освобожден.Таким образом, вы можете либо отправить ему сообщение retain
, либо создать с помощью alloc
вместо удобного метода создания.Например:
dictStateNames = [[NSDictionary dictionaryWithObjectsAndKeys:
// List of objects and keys...
nil] retain];
или это ...
dictStateNames = [NSDictionary alloc] initWithObjectsAndKeys:
// List of objects and keys...
nil];
Кроме того, вы можете объединить ваш stateNames
геттер и код инициализации в один метод, так что вы обычно будетесм. разработчики Objective-C пишут такой метод:
+ (NSDictionary *)stateNames
{
static NSDictionary *stateNames;
if (stateNames == nil) {
stateNames = [NSDictionary alloc] initWithObjectsAndKeys:
// List of objects and keys...
nil];
}
return stateNames;
}
Таким образом, нет необходимости вызывать его в методе экземпляра (что в любом случае было бы неправильно, так как каждый раз при созданииэкземпляр инициализируется, и если вы не обработаете его по-другому, предыдущий будет утечкой).
В другой (не связанной) заметке рассмотрите возможность переписать ваш init
метод следующим образом:
- (id)init
{
return [self initWithTarget:nil action:NULL];
}