I am trying to check if a CGRect
is null
in my property getter and if it is, load a value by default, however, in my init method, when I use the property, it returns zero for all values.
Here is my getter:
- (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;
}
I am not sure what's going on and where to look. Any help is much appreciated.
When you create an instance of your class, the _frame
instance variable is automatically initialized, even before the init
method is called. Since _frame
is a C-struct (CGRect
), its memory is cleared to all zeroes. This results in a CGRect
with all zero values.
CGRectNull
is a special, non-zero CGRect
. So your check using CGRectIsNull()
will never be true.
Using CGRectIsEmpty
is a more proper check for this.