搜尋

首頁  >  問答  >  主體

objective-c - OC編譯器是如何處理執行某段程式碼的?


 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中事件模型是怎麼樣的呢?

ringa_leeringa_lee2770 天前436

全部回覆(2)我來回復

  • 大家讲道理

    大家讲道理2017-04-24 09:16:03

    還有一種,就是一定是順序執行的。 。 。只是到了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 15130320320320320303:003232032323232323232323333333333:003:003:003:003]執行到了這裡setAnimationDuration2015-08-28 15
    20.022 02計算器[1403:73936] 執行到了這裡22015-08-28 15.
    就是說程式碼一定是順序執行的。 。沒有說把程式碼抽出來執行這一說法。 self.bg.frame=frame;執行的時候肯定是有某個類似於獲取動畫狀態之類的東西。 。

    回覆
    0
  • 迷茫

    迷茫2017-04-24 09:16:03

    google:呈現樹,渲染樹

    回覆
    0
  • 取消回覆