objective-c - C 结构的延迟初始化

标签 objective-c ios struct lazy-initialization

我不确定如何初始化 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/

相关文章:

objective-c - 当 alpha 设置为 0 时,iOS10 SFSafariViewController 不工作

ios - UITableview 不滚动?

ios - Swift iOS -SplitViewController 不会让我隐藏 StatusBar?

iphone - 代码/iOS : Iterating through all instances of a given class?

c - c中结构中的动态分配内存

iphone - 如何使用 CFNetwork 处理 iOS 上的互联网连接中断?

ios - 为 UITableView 部分构建数据结构

c++ - 为什么在另一个头文件中声明结构会导致LNK2001错误?

Swift - 在整个结构中搜索字符串

ios - 如何在 Objective-C 的 AlertView 中通过 http url 显示图像?