この投稿は、iosオブジェクトの基礎となる原理を学ぶ過程の記録です。
前書き
我々はすべての最も基本的なObjective - Cの(OCと呼ばれる)の開発で知っているように、オブジェクトを初期化するallocとinitメソッドの使用ですが、最も基本的で簡単な操作のこのオブジェクトの作成の日々の開発で使用する方法を知っているだけで、最終的に何をする内部の底部を知らない、これは、次の基本的な原則のすべてのこの記事に導入する必要がありますです。
データ準備
allocアイデアを探る
オブジェクトのセットを探索し、それらのメモリ・アドレスとオブジェクト・ポインタを表示します。
上記の図を見ることができる、同じオブジェクトアドレスの3つのクラスは、オブジェクトのポインタが異なっている、そのような結果、なぜ、OCの基礎となるメモリは、これらのクラスと一連の問題を作成する方法ですか?を探索するには、次のとおりです。
まず、最初の3つの方法について説明します。
- 制御方法、ブレークポイント位置
コントロールキーを押し続けます。
任せる
変える
上の赤いボタンをクリックすると下のイメージが表示されます。
クリックしてください。
図から、objcがわかる。_allocは libobjc にある。.A.dylibダイナミック・ライブラリ作成
同じ理由で
- ブレークポイントフォロー制御 + in
タイプ
ブレークポイントを通過させるだけで、allocのダイナミック・ライブラリーを見ることができます。
- コンパイル
22行目のブレイクポイントで、control + inのようにコントロールキーを押し続けると、次の図にジャンプします。
ソースコードをダウンロードして設定
- アロック
- _objc_rootAlloc
- controlメソッド、ブレークポイントの位置
- _objc_rootAllocWithZone
- _class_createInstanceFromZone
このメソッドの実装を見ると、メモリのサイズに関係しているのはサイズだけで、プリントサイズ
上の図は、サイズのアウトのサイズを見ることができ、それがどのように計算されるかを探ります。
- fastInstanceSize
- _objc_rootAlloc
& ~15
注釈
16バイトアライメント:スペースと時間の交換、次回はバイトアライメントに焦点を当てます。
上記allocの探索プロセスをフローチャートで整理すると以下のようになります。
豆知識
* :: initメソッドとnewメソッドのソースコード・ビュー
上の図は、新しいメソッドがメソッド
- _objc_rootAllocWithZone
1. register read : 現在のスレッドの汎用レジスタの値を返します。
2.x/4xgオブジェクト :現在のアドレスは4つのセグメントに分割され、16進数で表示されます。