Nib
下記を読めば ok
UITableViewCellの場合について
はじめに
概要
Nib は、Interface Builder で作成したインタフェースを保存した場合の保存形式。Nib は NeXT Interface Builder の略らしい。Nib ファイルは、ウインドウ、ビュー、コントロール等のアプリケーションのUI、視覚的要素を保持する。一方で、ウインドウやビューを管理するオブジェクトといった非視覚的要素も保持する。 用語
nib ファイル内のコンテンツを初期化はコストがかかる。そのため、同じ nib ファイルをアプリケーション内で何度もロードする、というのは効率が悪い。UINib は、nib ファイルのラッパーオブジェクトであり、主に nib ファイルのコンテンツをロード後、メモリ上にキャッシュし、何度も nib ファイルがロードされることによるパフォーマンスの悪化を防ぐ役割を持つ。そのほかにも、アプリケーションのメモリ使用量が上昇した場合には、メモリ上のキャッシュを自動的にリリースするようなリソース管理も担っている。 ディスク上の Bundle ディレクトリ内に格納されたコードおよびリソースの表現である。Bundle という用語自体は、Apple の文脈ではアプリケーションやフレームワーク、プラグイン等のあらゆるパッケージの抽象表現をさしている。詳細は下記参照だが、特に Bundle.main は現在開いているアプリケーション自体を示す。したがって、その中のリソースである nib ファイルをロードする場合にもよく利用される。 nib ファイルをロードするオブジェクトを示す placeholder WIP
ライフサイクル
nib ファイルの実態は xml なので、アプリケーションコードからそれを読み出してメモリ上に展開するという作業が必要になる。 1. nib ファイル内のオブジェクトグラフをメモリ上にのせる unarchive はされない
ロード対象の nib ファイルに関連する 画像, 音声リソースもキャッシュにのせる 2. メモリ上のオブジェクトグラフを unarchive し、各種オブジェクトをインスタンス化する
適合していなかった場合 init が利用される
5. nib ファイル内で Visible at launch time 属性が有効になっていたオブジェクトが画面に表示される Bundle.main.loadNibNamed
code:swift
func loadNibNamed(_ name: String,
owner: Any?,
awakeFromNib