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

Ham*_*mad 3 cocoa-touch initialization properties objective-c

我有一个int房产

@property(nonatomic) int stackTop;
Run Code Online (Sandbox Code Playgroud)

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

我尝试覆盖这样的setter方法

@sythesize stackTop = _stackTop;

-(void)setStackTop:(int)stackTop
{
    _stackTop = -1;
}
Run Code Online (Sandbox Code Playgroud)

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

lna*_*ger 6

在指定的初始值设定项中将其设置为-1.

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

在您的情况下,如果您没有其他方法init,那么您应该在-(id)init方法中执行此操作.正如其他人在我发布答案后所表现的那样,它看起来像这样:

-(id)init {
    if (self = [super init]) {
        _stackTop = -1;
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)