在一个方法中编写一些Objective-C,我调用+alloc
,然后调用-init
来设置一个对象。
object = [[MyClass alloc] init];
[object useFor:whatever];
接下来的几行代码使用新创建的对象。如果前面提到的-init
花了太长时间,我确信程序在开始使用新对象之前不会“等待”,是吗?如果没有,是否有快速确保-init
完成的方法?
我有时会看到程序员按照
的方式写一些东西if(object = [[MyClass alloc] init]) {
[object useFor:whatever];
}
这是我应该去做的吗?
答案 0 :(得分:9)
当您致电init
时,程序将不会继续到下一行,直到init
方法返回。到达第二行时,init方法已完成。它可能没有成功完成,但它已经完成。
第二种形式是测试。首先,if
语句调用init
方法。如果返回有效对象,则测试为true,然后执行下一个语句。这就是为什么你看到init方法在成功时返回self
而在遇到问题时返回nil
的原因;这样可以运行这样的测试,以确保在继续之前已成功初始化对象。
答案 1 :(得分:4)
命令按顺序执行而不是并行执行
(伙计,学习一些基础知识;)
答案 2 :(得分:3)
通常,C和Objective-C函数(和方法)中的语句按照您编写它们的顺序依次执行。如果你在一个函数中在另一个之前写了一个东西,那么第一个必须在下一个函数执行之前完成执行。
如果编译器认为这样做不会改变程序的行为(在不涉及并发的情况下它可以很好地预测),编译器可能会重新排序语句,但这是一种优化。 C标准将语句视为顺序语句,但允许编译器以任何方式实现它,只要实际程序的行为与语句在其编写顺序中执行的语句相同即可。
所有这些都是很长的说法:在调用方法可以恢复执行之前,您的init
方法将完成。