【发布时间】:2012-12-03 10:12:47
【问题描述】:
关于我所面临的情况,我有一个小问题。 我有两种方法:
- (void)firstSelector {
[self launchAsyncTask];
... do some work for a long time (10secs) ...
}
- (void)asyncTaskFinished {
... some work after 5secs of async task ...
}
firstSelector 执行launchAsyncTask,这只是一个后台任务,它有一个名为asyncTaskFinished 的回调。
假设firstSelector在启动异步任务后运行了一定时间(比如说10秒),并且异步任务运行了5秒,会不会出现并发问题?
这在后台是如何工作的?
asyncTaskFinished会在firstSelector之后执行,还是firstSelector会暂停运行asyncTaskFinished?
是否有运行循环的链接?方法是否添加到队列中,然后在我调用它们时执行?
我迷路了:)
谢谢。
【问题讨论】:
-
您阅读过文档developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/… 吗?我相信它可以解释一切,直到您有任何具体问题。
-
我知道我的回调是使用主线程运行循环排队的,但是 firstSelector 呢?我使用标准“[self firstSelector];”来执行它。也是这样排队的?
-
“回调”通常在与主“操作”相同的线程中触发,它可能是任何线程,而不仅仅是主线程。由于您没有要讨论的代码,因此通常有可能从分离线程调用
firstSelector并且launchAsyncTask也创建另一个后台线程。或者它们可能是相同的主线程/分离线程,或者其中一个位于主线程,另一个位于分离线程。您可能还决定始终在主线程上触发回调。这一切都是由设计驱动的,并且总是需要有据可查,因为每个场景都是不同的。
标签: iphone ios cocoa methods concurrency