Ожидается, что метод вернет экземпляр своего класса

У меня есть NSTimer который вызывается из метода класса для управления NSProgressBar, На первый взгляд, все работает нормально, хотя я получаю предупреждение, поскольку использую NSTimer, где я предполагаю, что компилятору нужно имя класса.

Когда я ставлю имя класса MyProgressBar на месте NSTimer предупреждение, кажется, уходит. Реальность заключается в том, что весь ад разваливается за кулисами, и распределение памяти начинает расти вверх и вверх.

Вопрос в том, как это действительно сделать?

.час

@interface MyProgressBar : NSProgressIndicator {
    double progressOffset;
    NSTimer* animated;
}

@property (readwrite, retain) NSTimer* animated;
@property (readwrite) double progressOffset;

.m

- (void)setDoubleValue:(double)value {
    [super setDoubleValue:value];
    if (![self isDisplayedWhenStopped] && value == [self maxValue]) {
        [self stopAnimation:self];
    }
}

- (NSTimer*)animated {   // This is the line with the warning 
    return animated;    // using MyProgressBar ends up creating a memory leak
}

- (void)setAnimated :(NSTimer *)value {
    if (animated != value) {
        [animated invalidate];
        animated = value;
    }
}

- (id)initWithFrame :(NSRect)frameRect {
    self = [super initWithFrame:frameRect];
    if (self) {
        self.progressOffset = 0;
        self.animated = nil;
    }
    return self;
}

предупреждение:

Method is expected to return an instance of its class type 'MyProgressBar', but is declared to return 'NSTimer *'
Overridden method returns an instance of its class type

-> завершить проект Github здесь, который отображает предупреждение.

1 ответ

Геттер должен называться animatedне animate,

Также вы должны использовать подчеркивание во всех ваших переменных экземпляра (шаблон по умолчанию) и отбросить метод получения / установки, так как компилятор обеспечит лучшие реализации (т.е. setAnimated не выглядит правильно, если я вспоминаю использование ручного подсчета ссылок). Получатель должен возвращать autoreleaseд объект.

Другие вопросы по тегам