3

int有财产

@property(nonatomic) int stackTop;

当它被合成时,它的默认值为 0。我想将此默认值设置为 -1。

我尝试像这样覆盖setter方法

@sythesize stackTop = _stackTop;

-(void)setStackTop:(int)stackTop
{
    _stackTop = -1;
}

然后初始值为-1而不是0,但是当stackTop程序中的变量发生变化时它不会改变。例如,我有self.stackTop++;,但它没有增加。使用非覆盖的 setter 方法,该语句确实会更改值。我究竟做错了什么?解决方案是什么?

4

4 回答 4

6

在您指定的初始化程序中将其设置为 -1。

编辑:
针对您的问题,指定的初始化程序是创建类实例时必须始终调用的一个初始化程序。它是唯一[super init];被调用的地方(它初始化你从父类继承的类的一部分),所有其他初始化程序必须调用这个指定的初始化程序,以确保正确设置类并且所有默认值都是设置,包括您要设置的那些。

在您的情况下,如果您没有其他以 开头的方法init,那么您应该在-(id)init方法中执行此操作。正如我发布答案以来其他一些人所展示的那样,它看起来像这样:

-(id)init {
    if (self = [super init]) {
        _stackTop = -1;
    }
    return self;
}
于 2012-06-22T14:29:55.493 回答
2

在你的 init 方法中设置它。

例如

-(id)init
{
 self = [super init];
 if(self)
 {
   _stackTop = -1;
 }
 return self;
}
于 2012-06-22T14:30:17.457 回答
2

您应该在指定的初始化程序中设置它。例如,如果您指定的初始化程序是无参数的,您可以这样做:

-(id)init {
    if (self = [super init]) {
        _stackTop = -1;
    }
    return self;
}
于 2012-06-22T14:31:06.023 回答
1

在您创建(或正在使用)的类的 init 方法中,添加以下行:

self.stackTop = -1;

这将在创建对象时初始化您的属性。

然后,您可以摆脱自定义设置方法。

于 2012-06-22T14:30:25.617 回答