我已经定义了一个属性......
@property (nonatomic, strong) NSArray *eventTypes;
我想覆盖getter和setter ......
我写过这个......
- (void)setEventTypes:(NSArray *)eventTypes
{
_eventTypes = eventTypes;
//do some stuff here.
}
这种方法很好但是当我添加这个...
- (NSArray*)eventTypes
{
//do some stuff here.
return _eventTypes;
}
然后这两个函数都显示错误,并且不知道_eventTypes是什么。
这两种方式都是一样的。它适用于一个功能,但只要我添加另一个功能,它就会失败。
我还需要做些什么吗?似乎很奇怪,它可以与任何一个机器人一起使用,而不是两者都可以。
答案 0 :(得分:20)
虽然LLVM会自动合成支持ivar(默认情况下以下划线为前缀),但如果同时实现getter和setter方法,则不会获得自动合成的ivar和这就是您必须手动@synthesize eventTypes = _eventTypes;
的原因。
您可以在此处详细了解:http://useyourloaf.com/blog/2012/08/01/property-synthesis-with-xcode-4-dot-4.html
答案 1 :(得分:2)
在@implementation
@synthesize eventTypes = _eventTypes;
答案 2 :(得分:1)
你必须@synthesize你的财产。我们想要创建一个自定义的getter和setter时使用它,比如:
在.m文件中的 @implementation 之后,添加:
@synthesize propertyName = _propertyName;
这告诉编译器您希望控制该特定属性的方法'get'和'set'。所以在那之后你的set和get的实现将会正常工作。
额外说明:
self.anyString = @“TEXT”;完全等效 [self setAnyString:@“TEXT”]; 这两个都在调用方法集。如果您使用 _anyString ,则直接访问该属性而不通过set方法。
因此,如果我们在set方法中调用 self.property ,我们将创建一个无限循环。一旦我们重写方法'set'和'get',我们必须使用 _ 而不是 self。。
答案 3 :(得分:-8)
试试这个:
- (void)setEventTypes:(NSArray *)eventTypes
{
self.eventTypes = eventTypes;
//do some stuff here.
}
- (NSArray*)eventTypes
{
//do some stuff here.
return self.eventTypes;
}