我收到以下警告:可写原子属性'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;
}
有关如何修复它的任何想法?
谢谢!
答案 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){}