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

 CH_Double_C 发布于 2022-10-25 06: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中事件模型是怎样的呢?

2 个回答
  • google:呈现树,渲染树

    2022-10-26 14:23 回答
  • 还有一种,就是一定是顺序执行的。。。只是到了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 1520.020 02计算器[1403:73936] 执行到了这里beginAnimations
    2015-08-28 1520.021 02计算器[1403:73936] 执行到了这里setAnimationDuration
    2015-08-28 1520.022 02计算器[1403:73936] 执行到了这里2
    2015-08-28 1520.022 02计算器[1403:73936] commitAnimations

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

    2022-10-26 14:23 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有