代码之家  ›  专栏  ›  技术社区  ›  Not Rick Astley

如何确保对象在使用前已完成初始化?

  •  3
  • Not Rick Astley  · 技术社区  · 15 年前

    用一种方法编写Objective-C,我调用 +alloc -init

    object = [[MyClass alloc] init];
    [object useFor:whatever];
    

    接下来的几行代码使用新创建的对象。如果上述 -初始化 时间太长了,我确定程序不会等到开始使用新对象,是吗?如果没有,有没有快速的方法来保证 完成了吗?

    if(object = [[MyClass alloc] init]) {
        [object useFor:whatever];
    }
    

    3 回复  |  直到 15 年前
        1
  •  3
  •   Chuck    15 年前

    通常,C和Objective-C函数(和方法)中的语句是按顺序执行的,顺序与编写它们的顺序相同。如果在一个函数中先写一件事再写另一件事,那么第一件事必须在下一件事执行之前完成。

    如果编译器认为这样做不会改变程序的行为(在不涉及并发的情况下它可以很好地预测),那么它可能会重新排序语句,但这是一种优化。C标准将语句视为顺序语句,但允许编译器以任何方式实现这一点,只要实际程序的行为与语句按编写顺序执行时的行为相同。

    init 方法将在调用方法可以继续执行之前完成。

        2
  •  9
  •   Abizern    13 年前

    init 初始化 方法返回。当您到达第二行时,init方法已经完成。它可能未成功完成,但它将已完成。

    if 声明调用 方法。如果返回一个有效的对象,那么测试为true,然后执行下一个语句。这就是为什么会看到init方法返回 self 当他们成功并且 nil 出现问题时;这样就可以运行这样的测试,以确保在继续之前已经成功初始化了对象。

        3
  •  4
  •   Tomen    15 年前

    命令按顺序执行,而不是并行执行

    (哥们儿,学点基础知识;)