可写原子属性'result'不能将合成的setter / getter与用户定义的setter / getter配对

时间:2011-08-09 03:43:04

标签: ios warnings atomic

  

可能重复:
  error: writable atomic property cannot pair a synthesized setter/getter with a user defined setter/getter

我收到以下警告:可写原子属性'result'无法将合成的setter / getter与用户定义的setter / getter配对

这就是我设置/获取它的方式:

@property (retain, getter=getResult) NSString *result;
@synthesize result;

我在下面的粗体/斜体线中收到警告:

***- (NSString *)getResult***
{
    if (result == nil)
        self.result = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
    return result;
}

有关如何修复它的任何想法?

谢谢!

2 个答案:

答案 0 :(得分:8)

合成atomic property会生成一个使用锁定的getter和setter,以确保始终在多线程环境中完全检索或设置该值。

将您的财产声明更改为:

@property (nonatomic, retain) NSString *result;

或者自己定义两个访问器并实现自己的锁定机制以保证原子性。

答案 1 :(得分:1)

当你为一个setter设置@property时,编译器会自动创建一个名为getResult的setter(尽管你看不到它)。所以,当你自己制作一个setter时,编译器会警告你它已经为你完成了。但是这不会导致任何功能问题,因为正如您可能已经看到的断点,仍然会调用此代码。因此,你可以删除在@property中创建setter的代码,或者你可以创建一个不具有相同名称的setter,并且不使用与默认setter相同的参数并自己调用它,比如

- (NSString *)getResult(id data){}