Ios 嵌套CATTransaction的行为?

Ios 嵌套CATTransaction的行为?,ios,caanimation,nsrunloop,catransaction,cfrunloop,Ios,Caanimation,Nsrunloop,Catransaction,Cfrunloop,下面的代码将在提交后立即更新背景色 [CATransaction begin]; self.view.backgroundColor = [UIColor redColor]; [CATransaction commit]; sleep(5); 但对于嵌套显式CATransactions,屏幕仅在最外层事务提交时更新 [CATransaction begin]; [CATransaction begin]; self.view.backgroundColor = [UIColor redCo

下面的代码将在
提交后立即更新
背景色

[CATransaction begin];
self.view.backgroundColor = [UIColor redColor];
[CATransaction commit];

sleep(5);
但对于嵌套显式
CATransactions
,屏幕仅在最外层事务提交时更新

[CATransaction begin];
[CATransaction begin];
self.view.backgroundColor = [UIColor redColor];
[CATransaction commit];
sleep(5);
[CATransaction commit];

这让它变得非常奇怪,因为我们知道runloop会在每个循环中创建一个最外部的隐式事务。当
显式事务
提交时,为什么此
隐式事务
不被视为最外部的事务

始终存在一个隐式事务。也可以有显式事务。隐式事务在所有代码运行完毕后才会提交。如果您有一个显式事务(
begin
commit
),那么它会在遇到
commit
时提交

嵌套显式事务的目的只是允许您为动画的不同部分提供不同的参数(例如持续时间);直到最外层的
提交
时,才发生实际提交。阅读:

只有在提交最外层事务的更改后,核心动画才会开始相关联的动画


始终存在一个隐式事务。也可以有显式事务。隐式事务在所有代码运行完毕后才会提交。如果您有一个显式事务(
begin
commit
),那么它会在遇到
commit
时提交

嵌套显式事务的目的只是允许您为动画的不同部分提供不同的参数(例如持续时间);直到最外层的
提交
时,才发生实际提交。阅读:

只有在提交最外层事务的更改后,核心动画才会开始相关联的动画


因此,当谈到嵌套事务时,我们总是提到显式事务?是的,第二个例子是关于嵌套显式事务,一个
begin…commit
对彼此内部。显式事务不会以任何有趣的方式“嵌套”在隐式事务中,因为它是提交的,因此与隐式事务以后的操作无关。因此,当谈到嵌套事务时,我们总是提到显式事务?是的,您的第二个示例是关于嵌套显式事务,一个
begin…commit
在彼此内部配对。显式事务不会以任何有趣的方式“嵌套”在隐式事务中,因为它是提交的,因此与隐式事务稍后的操作无关。