2016-10-17 2 views
1

私は最近、ビルドタイムアナライザ:https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcodeを使用してSwiftプロジェクトのコンパイル時間を分析し始めました。私は特に、この方法は、コンパイルすることは非常に緩慢であることに気づいた:Swiftコードのブロックが他のブロックよりずっと遅くコンパイルされる原因は何ですか?

func placeStatusSwitch() { 
     let switchX = tableView.center.x - (statusSwitch.frame.width/2) 
     var switchY = tableView.contentInset.top - statusSwitch.frame.height + tableView.contentOffset.y 

     if let refreshControl = refreshControl { 
      let navigationBarHeight = navigationController?.navigationBar.frame.height ?? 0 
      let expectedTopInset = UIApplication.shared.statusBarFrame.height + navigationBarHeight + statusSwitch.frame.height + MyTheme.verticalMargin - 4 

      if tableView.contentInset.top >= expectedTopInset || refreshControl.isRefreshing { 
       switchY = switchY - refreshControl.frame.height 
      } 
     } 

     statusSwitch.frame = CGRect(x: switchX, y: switchY, width: statusSwitch.frame.width, height: statusSwitch.frame.height) 
    } 

は、私が代わりに使用して無記号合体演算子を変更してみました:

var navigationBarHeight: CGFloat = 0 
      if let navBarHeight = navigationController?.navigationBar.frame.height { 
       navigationBarHeight = navBarHeight 
      } 

をコンパイル時にはまだ遅いですが。どのようなアイデアが減速の原因になっているのでしょうか?

+0

あなたはgcdとfamilierでなければなりません。この実行では、プロセスをバックグラウンドで遅くします。実行中に現在のプロセスで管理することができます。それはスレッド管理に関するものです。 – JAck

+0

Scientific Wild-Ass Guess(SWAG):算術式の型推論中になる可能性がありますか?それらの明示的な型を与えると助けになりますか? –

+0

@ColinBarrettあなたは 'switchX'などのために' CGFloat'を追加しますか? – KexAri

答えて

0

また、試すことができます。

  1. 代わりに推論された種類の明示的な型注釈を追加します。
  2. 長い計算を小さなものに分割します。
関連する問題