Установка переменных экземпляра в синхронизированном блоке в Objective C - PullRequest
0 голосов
/ 23 января 2011

У меня есть функция, которая синхронизируется, но кажется, что я не могу напрямую изменить значение переменных моего экземпляра в этом блоке.

+(id)allocWithZone:(NSZone *)zone
{
@synchronized(self) {
    if (sharedInstance == nil) {
        sharedInstance = [super allocWithZone:zone];

        //This is not allowed
        something = @"hello";

        //This is allowed
        self.something = @"hello world!";

        return sharedInstance;
    }
}

return nil;
}

Почему это так? У меня есть переменная, к которой мне нужен прямой доступ (и я не хочу синтезировать эту переменную). Как мне обойти это?

1 Ответ

5 голосов
/ 23 января 2011

Вы не можете изменять переменные экземпляра, потому что это не метод экземпляра.Значение self - это фактически сам класс.Ваша строка кода self.something = @"hello world!" тоже не будет работать.То, что вы действительно хотите, это sharedInstance.something = @"hello world!", и это будет работать, только если something является свойством.Еще лучше было бы настроить ivars в методе init.

О, и у вас нет бизнес-настройки ivars в +allocWithZone: в любом случае.Объект еще не был инициализирован.

Предполагая, что вы пытаетесь создать синглтон здесь (как это выглядит), вы можете прочитать это сообщение в блоге о синглетонахObj-C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...