objective-c - OC编译器是如何处理执行某段代码的?

浏览:73日期:2023-12-14

问题描述

CGRect frame= self.bg.frame;[UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:2];long tag=sender.tag; switch (tag) {case 10: frame.origin.y-=30; break;case 20: frame.origin.y+=30; break;default: break; }self.bg.frame=frame; [UIView commitAnimations];

中间这部分代码将被执行动画。我有一个比较奇葩的问题,就是这部分动画代码,编译器是如何获得的呢?

我的心里是这么想的,当然是伪代码表述:就是用String去截取,把这段代码截取出来去执行。。

求教。。

还有顺便一个问题,我一起问了吧。 self.bg.frame=frame;这样位置就变了。。那么OC或者说IOS肯定是不断监听这个属性的变化的。。那么IOS中事件模型是怎样的呢?

问题解答

回答1:

还有一种,就是一定是顺序执行的。。。只是到了commitAnimations才是真正提交。

- (IBAction)move:(UIButton *)sender { CGRect frame= self.bg.frame;[UIView beginAnimations:nil context:nil]; NSLog(@'执行到了这里beginAnimations'); [UIView setAnimationDuration:2]; NSLog(@'执行到了这里setAnimationDuration'); long tag=sender.tag; switch (tag) {case 10: frame.origin.y-=30; break;case 20: frame.origin.y+=30; break;default: break; }self.bg.frame=frame; NSLog(@'执行到了这里2'); [UIView commitAnimations]; NSLog(@'commitAnimations'); }

运行的结果:2015-08-28 15objective-c - OC编译器是如何处理执行某段代码的?20.020 02计算器[1403:73936] 执行到了这里beginAnimations2015-08-28 15objective-c - OC编译器是如何处理执行某段代码的?20.021 02计算器[1403:73936] 执行到了这里setAnimationDuration2015-08-28 15objective-c - OC编译器是如何处理执行某段代码的?20.022 02计算器[1403:73936] 执行到了这里22015-08-28 15objective-c - OC编译器是如何处理执行某段代码的?20.022 02计算器[1403:73936] commitAnimations

就是说代码一定是顺序执行的。。没有说把代码抽出来执行这一说法。self.bg.frame=frame;执行的时候肯定是有某个类似于获取动画状态之类的东西。。

回答2:

google:呈现树,渲染树

相关文章: