我不确定如何初始化 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,这似乎是由于结构在创建时未定义这一事实而引起的。
有没有“正确”的方法?
最佳答案
objc 类的所有成员在创建时都将初始化为零(即使是结构)。我不明白你关于内存分配的观点。该空间是为结构保留的(您没有存储指向它的指针)。无论您是否为其赋值,它都需要相同的空间。
关于objective-c - C 结构的延迟初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9253436/