您几乎肯定不想编写汇编指令来执行堆栈操作。iOS 已经在其第三版 ARM 指令集上,从 ARMv6 到 ARMv7 再到 ARMv7s。从 iPhone 5 开始,Apple 进一步增加了人为障碍,即您不得提交带有同样支持 iPhone 5 全屏的 ARMv6 分支的应用程序。我确信 Apple 的动机是确保它可以在未来某个时候过渡到没有 ARMv6 兼容模式的处理器,但对于我们开发人员来说,这显然意味着不要过于依赖特定的指令集。
这留下了线程。iOS 拥有一整套完善的线程机制,并且 pthread 可以公开相关的子集。Grand Central Dispatch 往往是现在用来确保不同任务可以同时发生的正常解决方案,因此吞下了大部分 Internet 文档,但仍然保留了较低级别的解决方案。
显而易见的简单示例,使用NSConditionLock:
- (void)methodOnThread1
{
while(1)
{
[conditionLock lockWhenCondition:kMoreInputAvailable];
// process whatever is currently in the common access pool
[conditionLock unlockWithCondition:kWaitingForInput];
}
}
- (void)methodOnThread2
{
while(1)
{
// do whatever is necessary to produce more input,
// creating it locally and taking as long as it takes
[conditionLock lockWhenCondition:kWaitingForInput];
// push input to common access pool, by whatever means
[conditionLock unlockWithCondition:kMoreInputAvailable];
}
}