Подтвердить что ты не робот

Проверьте, нет ли CGRect в getter

Я пытаюсь проверить, есть ли CGRect null в моем получателе свойств, и если это так, загрузите значение по умолчанию, однако, в моем методе init, когда я использую свойство, он возвращает ноль для всех значения.

Вот мой получатель:

- (CGRect)frame
{
    if(CGRectIsNull(_frame))
        _frame = CGRectMake(0,0,60,60);
    return _frame;
}

- (id)init
{
    self = [super initWithFrame:self.frame];
    if(self)
    {
        //do something
    }
    return self;
}

Я не уверен, что происходит и где искать. Любая помощь очень ценится.

4b9b3361

Ответ 1

При создании экземпляра вашего класса переменная экземпляра _frame автоматически инициализируется, даже до вызова метода init. Поскольку _frame является C-struct (CGRect), его память очищается ко всем нулям. Это приводит к CGRect со всеми нулевыми значениями.

CGRectNull является специальным, отличным от нуля CGRect. Таким образом, ваш чек с использованием CGRectIsNull() никогда не будет правдой.

Использование CGRectIsEmpty является более правильной проверкой для этого.

Ответ 2

Try

- (CGRect)frame
{
    if (CGRectIsEmpty(_frame)) 
    _frame = CGRectMake(0,0,60,60);

    return _frame;
}