请考虑以下代码:
// MyClass.h
@interface MyClass
@property NSInteger Value;
@end
//MyClass.m
@implementation MyClass
@synthesize Value;
@end
如果我想覆盖仅 Value
的合成setter方法,我需要做出哪些最小的代码修改?
作为后续行动,为了覆盖仅合成的getter方法,我必须做出哪些最小的修改?
修改
覆盖很简单。 (请参阅下面的答案。)在我的情况下,我收到一个令人讨厌的警告,因为我没有将nonatomic
属性包含在我的属性定义中。添加属性已经解决了我的初始问题,导致了这个问题。
答案 0 :(得分:3)
显然,不可能只覆盖原子属性中的一个或另一个。您必须将其更改为nonatomic
属性。
@property (nonatomic) NSInteger value;
五分钟前我不知道,据我所知,TOCPL中的任何地方都没有注明。
同时将名称更改为小写。 ObjC中的惯例是较低的ivars首字母。
除此之外,只需实现您想要的任何一个,编译器将完成其余的工作。您可以有效地覆盖任何一个,一个或两个。
只是吸气者:
@implementation MyClass
@synthesize value;
- (NSInteger) value {
return value;
}
@end
只是二传手:
@implementation MyClass
@synthesize value;
- (void) setValue: (NSInteger)newValue {
value = newValue;
}
@end
对象类型(和覆盖原子性)的方法稍微复杂一些;这里有几个关于SO的问题,some info in the Apple docs将会解释。
答案 1 :(得分:1)
将所有内容保持原样(除了将Value
更改为value
以进行标准化),然后您可以实现以下一项或两项:
-(NSInteger)value
{
return value;
}
-(void)setValue:(NSInteger)newValue
{
value = newValue;
}
value
会自动创建为类字段。如果您正在使用保留对象,则除非使用ARC,否则需要手动保留/释放。