手動レイアウトvsストーリーボード/ペン先

ほとんどのiOS開発者はStoryboardに精通しています。 Appleはそれを使用することをお勧めします。 しかし、最近、このツールの便利さから疑問が生じます。



以下では、ストーリーボードまたは一連のXibファイルを使用して、手動verst(自動レイアウトを使用して)を使用せずにさまざまな方法を比較します。 このトピックを完全に公開するつもりはありません。エラーを指摘したり、他の方法論や比較基準を提供したりしていただければ幸いです。



この投稿には実験や学術的な計算は含まれておらず、iOS開発の分野における私の知識と経験に基づいています。 専門家の意見を知ってうれしいです!



一部の予約には、次の開発方法があります。



ストーリーボードとXib



問題は次のとおりです。

  1. ほとんどのアニメーション関連コードはそこに配置できません。
  2. それらが複数ある場合、一方から他方に切り替えると、メインスレッドに負荷が作成されます(NSKeyedArchiverはストーリーボードを解析する必要があり、それ自体は遅いです)。
  3. 望むなら、Storybaordですべてを行うことはできません。 たとえば、cornerRadius、shadowOffsetなどを設定します。 ; 実際、可能です-ユーザー定義のランタイム属性(@IBInspectable)


長所:

  1. レイアウトは視覚的です。
  2. ユーザーストーリーは表示時に表示されます。
  3. サイズクラス
  4. Embedded Segue / Storyboard Referenceを使用し、楽しく生きています
  5. 遷移のタイプから抽象化し、遷移自体を実装するには、セグエ識別子( RamblerSeguesを参照)を知るだけで十分です。また、自動依存性注入ライブラリ(台風を参照)を使用する場合は、依存関係の実装から抽象化します。


自動レイアウトを使用した手動レイアウト



さまざまなツール、最も便利なツール-PureLayoutおよびCartography(迅速に)を使用しました。



問題は次のとおりです。

  1. より多くのコード(約1.2倍)。
  2. 可視性なし
  3. 洗練されたレイアウトが地獄に変わる


長所:

  1. 少し高速-Xib / Storyboardファイルの解析を節約NSKyedArchiver th。
  2. すべてが宣言型であり、すべてが1か所にあります(ストーリーボードとテキストを絶えず切り替える必要はありません)。
  3. アニメーション(パンなど)を作成する方が便利です。


手動レイアウト



問題は次のとおりです。

  1. 正しく実装されていない場合、ハードコーディングされた値があります(正しい場合は、パディングのみなど。さらに、これは個別のヘッダーでレンダリングできます)。
  2. より多くのコード(約1.5回)。
  3. 可視性なし
  4. 外部ビューのパラメーターを変更するときは、フレームの適切な変更に注意する必要があります
  5. サイズクラスなし


長所:

  1. 適切な実装により、すべてが非常に柔軟になります。
  2. より速く動作します。
  3. バックグラウンドスレッドでフレームを計算し、後で適用することができます。


まとめ



[Stobyboard、Xib、Autolayout]のそれぞれが放棄されると、作業がより複雑になり、コードが大きくなります。



次の場合は、ストーリーボードを使用しないことをお勧めします(必ずしも完全ではありません)。



TableView / CollectionViewに必要なリソースをStoryboardまたはXibで実行しないでください(ファイルの解析に時間がかかり、 柔軟性が失われます )。 最適化中に、最初に自動レイアウトを使用してそれを行うことができますが、ラグが通らない場合-ツールで測定し、レイアウトが遅くなっていることを確認してから、手動アカウントに切り替えます。



場合によっては、TableViewCellとCollectionViewCellの両方に同様のコンテンツを表示する必要があります。 手動レイアウトでは、これは問題になりません。 Xibを使用する場合、たとえば、次のように解決されます。セルの内容はxibファイルにタイプセットされ、初期化セルでは、指定されたビューでaddSubviewを呼び出します。



編集:



要約すると、Storyboardには手動レイアウトよりも次の利点があると言えます。





必要な場合は手動レイアウトを使用し、自動レイアウトがボトルネックになる場合はフレームに移動します( コメントを参照)。



All Articles