Я реализую синглтон-класс следующим образом:
static Singleton* _singletonInstance;
@implementation Singleton
+(void)initialize
{
_singletonInstance = [[Singleton alloc] init];
}
+(Singleton*)instance
{
return(_singletonInstance);
}
initialize вызывается только при первом вызове экземпляра. Затем у меня есть метод, который я могу вызвать для установки некоторых переменных экземпляра. Так что в итоге это выглядит так.
_singleton = [Singleton instance];
[_singleton setupWithParams: blah];
Когда я получаю экземпляр этого синглтона внутри объекта, он отлично работает в первый раз; Однако после того, как я освобождаю и создаю новую копию объекта, которому нужен экземпляр синглтона, я получаю ошибку BAD ACCESS, когда пытаюсь вызвать функцию установки.
Просто чтобы проверить вещи, я распечатываю адрес экземпляра перед тем, как сделать вызов установки, и оба раза они сообщают об одном и том же адресе, но когда я проверяю журнал ошибок для вызова BAD ACCESS, в нем перечисляется совершенно другой адрес памяти.
У кого-нибудь есть идеи, почему этот указатель на экземпляр выглядит нормально, когда я его печатаю, но когда я обращаюсь к нему, он, по-видимому, указывает на случайные данные?