C構造体またはpre-iOS5基本型のクラスプロパティを初期化する方法がわかりません。これは私がクラスを扱っていた場合私がやっていることですが、作成時に定義されていないので、構造体が初めてアクセスされたかどうか確認することはできません。C構造体の遅延初期化
@interface GraphView : UIView
@property (nonatomic) CGPoint origin;
@end
@implementation GraphView
@synthesize origin = _origin;
- (CGPoint)origin
{
if (WHAT?) {
_origin = CGPointMake(self.bounds.origin.x + self.bounds.size.width/2,
self.bounds.origin.y + self.bounds.size.height/2);
}
return _origin;
}
@end
私はレイジー初期化の主な利点はメモリ割り当てのためであることを認識していますが、クラスであるすべてのプロパティに対してこれを行っている場合、同じスタイルを使用してすべてのプロパティで開始値を設定するのが最も明白です。
他のインスタンス変数やプロパティを使用して、self.originにアクセスしたかどうかを追跡できますが、そのように見えます...滑らかではありません。私はそれを設定する前にself.originにアクセスしないように気をつけることができました。これは、構造体が作成時に定義されていないという事実によって軽く随伴されるようです。
"正しい"方法はありますか?
右。ありがとうございました。スタック上のstructは設定されるまで定義されていないので、ここでは定義されません。しかし、そうです。 – bsdfm
@rasmus、これを説明できますか? http://stackoverflow.com/questions/13372551/c-struct-not-initialized-to-zero-in-objective-c – Philip007