我不确定如何初始化 C 结构或 iOS5 之前的基本类型的类属性。如果我正在处理一个类,这就是我会做的事情,但我不知道我可以检查这是否是第一次访问该结构,因为它们在创建时未定义:
@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,这似乎是由于结构在创建时未定义的事实而产生的。
有没有“正确”的方式?