如何在 objective-c 中对原子属性的 ivar 创建手动锁?



我想在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;
    ...
}

根据Apple Objc lang列表上的一些聊天,原子属性被认为是一个bug,您可以手动创建一个访问器并合成另一个。替代方案是:

  1. 自己创建两个访问器,并使用定制的锁定对象加上@synchronized(anObject),然后可以在类代码的其他地方使用它
  2. @synthesize,并且总是通过它们的访问器(即内部self.myAtomicProp)来访问它们。这速度较慢,但在几乎所有情况下都可能不是问题

最新更新