为属性设置0以外的默认值

时间:2012-06-22 14:27:54

标签: objective-c cocoa-touch properties initialization

我有一个int属性

@property(nonatomic) int stackTop;

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

我尝试覆盖像这样的setter方法

@sythesize stackTop = _stackTop;

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

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

4 个答案:

答案 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方法。