Ios 可写原子属性';结果';无法将合成的setter/getter与用户定义的setter/getter配对

Ios 可写原子属性';结果';无法将合成的setter/getter与用户定义的setter/getter配对,ios,warnings,atomic,Ios,Warnings,Atomic,可能重复: 我收到以下警告:可写原子属性“result”无法将合成的setter/getter与用户定义的setter/getter配对 这是我设定/获取它的方式: @property (retain, getter=getResult) NSString *result; @synthesize result; 我在下面粗体/斜体的行中得到警告: ***- (NSString *)getResult*** { if (result == nil) self.resu

可能重复:

我收到以下警告:可写原子属性“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;
}
有没有办法解决这个问题


谢谢

当您为setter设置@property时,编译器将自动生成一个名为getResult的setter(尽管您无法看到它)。因此,当您自己创建setter时,编译器会警告您它已经为您完成了设置。但这不会导致任何功能问题,因为正如您可能已经看到的断点一样,此代码仍然被调用。因此,您可以删除在@property中创建setter的代码,或者创建一个与默认setter名称不同、参数不同的setter,然后自己调用它,如

- (NSString *)getResult(id data){}
合成生成一个getter和setter,它使用锁来确保在多线程环境中始终完全检索或设置值

将您的属性声明更改为:

@property (nonatomic, retain) NSString *result;

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

Getter方法不应以get。。。目的-C;得到。。。方法通常将值写入其参数中。此外,KVC不适用于非标准的getter方法。看看您最近提出的问题,我强烈建议您阅读,以了解一些平台命名约定。