检查getter中的CGRect是否为null

cri*_*ald 25 null ios cgrect cgrectmake ios6

我试图检查a CGRect是否null在我的属性getter中,如果是,默认情况下加载一个值,但是,在我的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;
}
Run Code Online (Sandbox Code Playgroud)

我不确定发生了什么,在哪里看.任何帮助深表感谢.

rma*_*ddy 53

创建类的_frame实例时,即使在init调用方法之前,也会自动初始化实例变量.由于_frame是一个C-struct(CGRect),它的内存被清除为全零.这导致a CGRect全部为零.

CGRectNull是一种特殊的,非零的CGRect.所以你的支票使用CGRectIsNull()永远不会成真.

使用CGRectIsEmpty是一个更合适的检查.

  • `CGRectIsEmpty`是更好的方式,但我认为值得一提的是你也可以使用`CGRectEqualToRect`并与'CGRectZero`进行比较 (6认同)

Anu*_*das 11

尝试

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

    return _frame;
}
Run Code Online (Sandbox Code Playgroud)