我有一个int
属性
@property(nonatomic) int stackTop;
当它被合成时,它的默认值为0.我想将此默认值设置为-1。
我尝试覆盖像这样的setter方法
@sythesize stackTop = _stackTop;
-(void)setStackTop:(int)stackTop
{
_stackTop = -1;
}
然后初始值为-1而不是0,但是当变量stackTop
在程序中发生变化时它不会改变。例如,我有self.stackTop++;
,但它没有增加。使用非重写setter方法,该语句确实会更改该值。我究竟做错了什么?解决方案是什么?
答案 0 :(得分:6)
在指定的初始值设定项中将其设置为-1。
修改强>
在回答您的问题时,指定的初始化程序是 一个初始化程序,在创建类实例时必须始终调用它。它是调用[super init];
的唯一位置(初始化从父类继承的类的一部分),并且所有其他初始化程序必须调用此指定的初始化程序,以确保正确设置类并设置所有默认值,包括您要设置的值。
在您的情况下,如果您没有其他以init
开头的方法,那么您应该使用-(id)init
方法。正如其他人在我发布答案后所表现的那样,它看起来像这样:
-(id)init {
if (self = [super init]) {
_stackTop = -1;
}
return self;
}
答案 1 :(得分:2)
在init方法中设置它。
e.g。
-(id)init
{
self = [super init];
if(self)
{
_stackTop = -1;
}
return self;
}
答案 2 :(得分:2)
您应该在designated initializer中进行设置。例如,如果指定的初始化程序是无参数的,则可以这样做:
-(id)init {
if (self = [super init]) {
_stackTop = -1;
}
return self;
}
答案 3 :(得分:1)
在您创建(或正在使用)的类的init方法中,添加以下行:
self.stackTop = -1;
这将在创建对象时初始化您的属性。
然后,您可以摆脱自定义setter方法。