プロパティゲッターで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;
}
何が起こっているのか、どこを見ればよいのかわかりません。どんな助けでも大歓迎です。
クラスのインスタンスを作成すると、init
メソッドが呼び出される前でも、__frame
_インスタンス変数が自動的に初期化されます。 __frame
_はC構造体(CGRect
)であるため、そのメモリはすべてゼロにクリアされます。これにより、すべてゼロの値を持つCGRect
が生成されます。
CGRectNull
は、ゼロ以外の特別なCGRect
です。したがって、CGRectIsNull()
を使用したチェックは決して真にはなりません。
これを確認するには、CGRectIsEmpty
を使用する方が適切です。
試す
- (CGRect)frame
{
if (CGRectIsEmpty(_frame))
_frame = CGRectMake(0,0,60,60);
return _frame;
}
Swift 4.の更新された回答です。CGRectのisNull
ブールプロパティを使用するだけで、CGRectNullを確認できます。
let someRect = CGRect.null
print(someRect.isNull) // true