Есть ли способ сделать ленивую инициализацию атомарного свойства без необходимости писать сеттер и геттер вручную? - PullRequest
3 голосов
/ 16 октября 2011

Очевидно, невозможно использовать @synthesize при перезаписи элемента доступа к атомарным свойствам. Xcode 4 выдаст предупреждение.

Теперь есть еще один способ использования отложенной инициализации атомарных свойств , в то же время позволяя Xcode автоматически синтезировать и геттер, и сеттер, безперезаписать кого-нибудь из них?

1 Ответ

6 голосов
/ 16 октября 2011

Что вам нужно сделать, это написать и сеттер и геттер.Вы все еще можете @synthesize получить хранилище.Например:

//.h
@property (strong) id x;

//.m

@synthesize x = _x;
- (id)x
{
    @synchronized(self)
    {
        if (!_x)
        {
            _x = [[MyX alloc] init];
        }
        return _x;
    }
}

- (void)setX:(id)x
{
    @synchronized(self)
    {
        _x = x;
    }
}

Возможно, вам потребуется выполнить дополнительное управление памятью без ARC, и вы можете захотеть создать другую блокировку (вместо self) или использовать другой метод синхронизации, но это даст вамсуть.

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