blog

iOSのオブジェクトの原則の探査III - クラスの構造と性質

は、オブジェクトのクラスを表す構造体なので、NSObjectクラスは、オブジェクトの対応するクラスを指すisa型構造体が含まれています。 はオブジェクトのインスタンスを表す構造体であり、isa_t構造...

Jun 18, 2020 · 3 min. read
シェア

まず、クラスとは何か、クラスの構造とは何かという問いを捨ててください。

前章では、クラスのallocメソッドを探索し、ソースコードを通してクラスのメモリ空間の開放を分析しました。その構造とは?

  • クラスとは何ですか??

これを勉強してMRPersonクラスを作成し、clangコマンドを使って.cppファイルにコンパイルします。

main.cppファイルを開いて、ファイルは非常に長いです、コマンド+ Fグローバル検索MRPerson.functionはすることができます)あなたは、次のことができます。

上の図は、MRPersonは構造体の構造型であることがわかる

継続分析

objc_objectとNSObject_IMPLについてはどうですか?

typedef Struct 修飾子のおかげで、.cpp ファイルからグローバルに

その定義には明らかにクラス・タイプisaが含まれているので、このクラスは何なのかという疑問が生じます。

上の7152行目のコードにこの定義があります。typedef struct objc_class *Class; このコード行からよくわかるように、Classはobjc_class構造体へのポインタです。

objc_classとは何でしょうか?

objc_classの定義を見つけるために.cppファイルでこの時間を続けることができない、この時間だけ見つけるためにソースコードにすることができます:ソースコードを開き、ちょうどobjc_objectの定義を見つけるために.cppファイルを介して**objc_class **を見つけるためにobjc.hファイルのソースコードに今すぐ

このような宣言をするには、右クリックして**objc_class**と続けます。

 : 上記の2つのジャンプがあり、objc -ランタイム-newファイルを見つけるために、ジャンプをクリックする

objc_classはオブジェクトのクラスを表す構造体なので、NSObjectクラスはそのオブジェクトに対応するクラスを指すobjc_class構造体タイプのisaを含んでいます。

objc_object`は **オブジェクト** のインスタンスを表す構造体で、 `objc_object` は `isa_t` 型の構造体の `isa` を1つだけ含むので、 `objc_class` も `isa_t` 型の構造体の `isa` を1つ含むことになります。** この `isa_t` 構造体には、現在のオブジェクトが指すクラスに関する情報が含まれています。**

以上の調査の結果、次のように結論づけられます。

クラスの構造とは何ですか

上記は最終的に、一連のルックアップを通してこのような構造を見ています。

まず、objc_classがNSObjectを継承していること、objc_classがジェネリックisaを持っていることがわかります。

isaの内容は、学ぶために別の記事を開く必要があり、次の章を探索し続けることです。

Read next

HashMapの質問、これで十分なので見てほしい!

前文で実装原理を詳しく理解しているので、ソースコードを読んでください。しかし、jdkのバージョンアップが急速に繰り返される中、ついに主流となるjdkのバージョンがJDK7からJDK8に移行しました。 JDKの前方互換性のため、JDK8ではsynchronized修飾子は見当たりませんでした。

Jun 18, 2020 · 25 min read