Проверьте, нет ли 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;
}
Я не уверен, что происходит и где искать. Любая помощь очень ценится.
Ответы
Ответ 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;
}