Синглетоны и управление памятью в Какао - PullRequest
0 голосов
/ 02 апреля 2011

У меня есть метод класса singleton:

+(WordsModel *) defaultModel{
    static WordsModel *model = nil;  

    if (!model) {
        model =  [[[self alloc] init] autorelease];
    }

    return model;
}

Что происходит со статической ссылкой на модель внутри метода?Будет ли он когда-либо выпущен?

Ответы [ 2 ]

3 голосов
/ 03 апреля 2011

Мало того, что оно будет выпущено (потому что вы отправили ему сообщение -autorelease), ваша следующая попытка использовать его, вероятно, приведет к падению, потому что указатель model не был установлен равным нулю, когда объект был освобожден , Таким образом, он будет указывать на память, которая либо является мусором, либо (если эта память использовалась повторно) на объект, отличный от того, который вы ожидали.

1 голос
/ 03 апреля 2011

Это не сработает, поскольку вы автоматически выпускаете свой экземпляр класса ...

На следующем цикле запуска он будет выпущен ...

Взгляните на стандартные одноэлементные паттерны: http://www.cocoadev.com/index.pl?SingletonDesignPattern

Статический экземпляр должен быть глобальной переменной, которая будет освобождена при выходе из приложения ...

...