ios - 大家中午好,xcode 中如何查看一个对象是在堆区还是在栈区?
迷茫
迷茫 2017-04-18 09:47:36
0
3
925

大家中午好,xcode 中如何查看一个对象是在堆区还是在栈区?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全員に返信(3)
黄舟

閲覧できないはずです。
new、alloc、retain、copy で始まる初期化メソッドは、参照カウントによって管理されるオブジェクトを含め、すべてヒープ領域にあります。
定数はスタック領域に配置されます。

単純に、NSString *aString = @"aaa" を削除します 编译时会转换为常量

他の Objective-C オブジェクトは、理論的にはヒープ領域にあります。

さらに、ブロックも例外で、特定の知識ポイントについては、メモリ管理について学ぶことができます。

いいねを押す +0
巴扎黑

オブジェクトがヒープ領域またはスタック領域にあるかを確認する方法
============================== ==
あなたの質問はかなり曖昧です。メソッドの実行中であれば、ローカルで定義されたネイティブ型(または値型)です。その場合、それはスタック上にある必要があります。関数の実行が終了すると直接破棄されます。他の参照型 (または oc のインターフェイス) はヒープ上に作成され、ARC はそれらをクリーンアップする役割を果たします。

あなたが聞きたいのはクラス Foo だと思います {

リーリー

}
この時点で、フィールドはスタック上にありますか、それともヒープ上にありますか?これが問題である場合は、 a はヒープ上にありますが、それは値型であることを伝えてください。

値の型は、メモリがスタックに割り当てられるかヒープに割り当てられるかには関係がなく、値によるコピー (暗黙的に不変) にのみ関係します

いいねを押す +0
Peter_Zhu

通常の状況では、アドレスを出力して、それがヒープ メモリ内にあるかスタック メモリ内にあるかを判断できます。スタックは上位アドレスから下にあり、ヒープは下位アドレスから上にあります。一般に、0x7fff が表示されます。 .... スタック内で注意すべきことの 1 つは、NSString がヒープ アドレスよりも低い位置にあることです。メモリがどのように分割されているかを見てください。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート