Как создать ручную блокировку для ивара атомарного свойства в target-c? - PullRequest
2 голосов
/ 24 февраля 2012

Я хочу представить атомарное свойство в моем классе obj-c, но внутренне я бы предпочел получить доступ к его экземпляру var напрямую, используя self.myproperty для каждой ссылки.Как вручную создать блокировку для внешнего чтения?

Итак, я хочу ...

@property (atomic, strong) NSString *someString;

- myInternalMethodOfClassA
{
    ...
    @synchronized(someString) {
        someString = @"New string";
    }
    ...
}

... заблокировать ...

- myInstanceMethodInClientClassB 
{
    ClassA *myobj = [ClassA alloc] init];

    ...
    NSString *str = myobj.someString;
    ...
}

1 Ответ

0 голосов
/ 02 марта 2012

Согласно некоторому чату в списке Apple Objc-lang считается ошибкой иметь атомарное свойство, для которого вы вручную создаете один метод доступа и синтезируете другой. Альтернативы:

  1. Создайте оба средства доступа самостоятельно и используйте специальный объект блокировки плюс @synchronized(anObject), который затем можно использовать в другом месте кода вашего класса.
  2. @synthesize их и всегда обращайтесь к ним через их методы доступа (т.е. self.myAtomicProp внутри). Это медленнее, но, скорее всего, не проблема почти во всех случаях.
...