手動レイアウト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には手動レイアウトよりも次の利点があると言えます。


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

Source: https://habr.com/ru/post/J271355/


All Articles