【发布时间】:2012-04-23 03:27:42
【问题描述】:
我正在努力解决代码“执行顺序”的概念,到目前为止,我的研究还不够。我不确定我的措辞是否不正确,这个概念可能有更合适的术语。如果有人能阐明我下面的各种绊脚石,我将不胜感激。
我明白,如果你一个接一个地调用一个方法:
[self generateGrid1];
[self generateGrid2];
两种方法都运行,但 generateGrid1 不一定要等待 generateGrid2。但如果我需要它怎么办?假设 generateGrid1 进行一些复杂的计算(需要未知的时间)并填充 generateGrid2 用于其计算的数组?每次触发事件时都需要执行此操作,而不仅仅是一次初始化。
我需要一种按顺序调用方法的方法,但有些方法要等待其他方法。我研究过回调,但在我见过的所有示例中,这个概念总是与代表结合在一起。
我也不确定何时确定我不能合理地期望一行代码被及时解析以供使用。例如:
int myVar = [self complexFloatCalculation];
if (myVar <= 10.0f) {} else {}
我如何确定某件事是否需要足够长的时间来实施检查“在我开始我的事情之前是否完成了其他事情”。只是反复试验?
或者也许我将一个方法作为另一个方法的参数传递?它是否在执行方法之前等待对参数进行评估?
[self getNameForValue:[self getIntValue]];
【问题讨论】:
-
编译器和/或 CPU 在符合逻辑的情况下自动优化执行顺序。例如,如果第二个调用不依赖于第一个调用,它们可能会并行运行,或者以更有效的顺序运行。如果您想要对并发执行进行更高级别和更明确的控制,您通常会考虑使用线程和/或进程,不是吗?也许你可以把你的问题更具体一点?
-
我会研究调度队列,苹果术语中的 GCD。 iTunes 中有许多来自以前 WWDC 会议的优秀视频,可以帮助您解决这个问题。
-
(或者这是我错过的 Objective-C 概念)
-
@aaaidan:在这种情况下,您的第一条评论非常具有误导性:消息发送不受编译器重新排序的影响,因为编译器可以'不知道另一端发生了什么——消息在运行时被解析。
-
@IuliusCæsar 是的,被指控有罪。我错误地将消息发送视为函数调用。
标签: objective-c arrays oop design-patterns