C结构的延迟初始化

bsd*_*dfm 0 struct objective-c lazy-initialization ios

我不确定如何初始化一个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
Run Code Online (Sandbox Code Playgroud)

我意识到延迟初始化的主要好处是内存分配,但如果我这样做是为所有的类的属性,似乎清晰的使用相同的风格对我的所有属性设置的初始值.

我可以使用其他一些实例变量或属性来跟踪是否已访问self.origin,但这似乎......不顺利.在设置它之前,我可以注意永远不要访问self.origin,这似乎有点因为结构在创建时未定义.

有"正确"的方式吗?

ras*_*mus 5

objc类的所有成员将在创建时初始化为零(甚至是结构).我不指你内存分配.该空间是为结构保留的(您没有存储指向它的指针).无论您是否为其指定了值,它都需要相同的空间.