スタリスク使用量はObjective-C:に関する質問
-
20-09-2019 - |
質問
私はカップルに関する質問この: スタリスク使用量はObjective-C
NSArray配列;地元の範囲のようにオブジェクト"割り当て"のスタックです。NSArray*配列;を示すオブジェクトッhunkのメモリ、通常より割り当てられるヒープ.
どんな時はスタックのヒープ?すべて局所変数のスタックはすべてのポインタのヒープ?
がんdereferencingのポインタをオブジェクトとそのポインタをオブジェクトはこのメソッド内で実施そのものです。きるといいな。
ぁ
解決
どんな時はスタックのヒープ?すべて局所変数のスタッ---
ではどちらでも構いません。のスタックヒープは実装の細部にまでのCおよびObjective-C言語を知らないに使われているので、やるべき一般的な理由が何かとスタックのヒープ.
Mac OS Xでは、局所変数のスタックです。でも、ほぼすべての目的ではないことがいえる。自信のない人も安心してください.
とは---すべてのポインタのヒープ?
No.ポインタメモリアドレス;ることはありません。
ポインタ 変数 できるものその他の変数はできるか、どこでも対象に実装で定義されています制限す把握しない時に気をつとしてあります。
見 私のポインタのチュートリアル ます。
がんdereferencingのポインタをオブジェクトとそのポインタをオブジェクトはこのメソッド内で実施そのものです。きるといいな。
ぁ
ポインタはメモリアドレスです。あなたのことをいい、メモリにそのアドレスです。Dereferencingのポインタにアクセスすること。
いとは絶対に直接アクセスメモリーのココアのオブジェクト。までお送りのみメッセージをお願いするにあたっては教えてあげたりすることができるようになります。このような逆参照のポインタです。
"...というポインタをオブジェクトはこのメソッド内で実施そのものです。"とは、オブジェクトは、そのメソッド実装は、独自のポインタです。ならではのメッセージを送信するために、ポインタをオブジェクト(このディテールは通常は省略).ばねっこの受信メッセージの(つまり、オブジェクトでe-変更を記述しないだろう独自のポインタです。
ではないでしょうかれたメッセージを送信するためには、逆参照さオブジェクトです。当たり前ですがメッセージを送るためのポインタを物、その場合、ほとんどのケースでは、オブジェクトが必要なことがポインタを自作する仮想的な力へのメッセージは、逆参照さオブジェクトのどちらがいいでしょうか?
なので無駄なものです。のオブジェクトに必要な独自のポインタをポインタのオブジェクトのメソッド実装は知る必要はありません。 のみ メッセージを送るポインタです。
他のヒント
*は、C、C ++、およびObjective-Cの抑制演算子です。控えめな演算子、および一般的にメモリ管理を理解することは、目標cよりもはるかに広いです。これは、C/C ++/Objective-C開発者の基本的なスキルです。詳細については、ネット上の多数のイントロCチュートリアルをご覧ください。
編集:Cポインターに関するチュートリアルはすべて行います。このようなもの http://home.netcom.com/~tjensen/ptr/pointers.htm
ココアでは、スタックが割り当てられたオブジェクトを使用することはありません。すべてのオブジェクトには、A *が付いています(タイプ「ID」は、「一部のオブジェクトへのポインター」の別の単語であることを思い出してください)。
あなたはいつもこれを持っています:
NSArray *myArray;
そしてこれは決してありません:
NSArray myArray;
あなたは常にポインターを避けているので、あなたは2番目のチャンクを無視することができます。
これらの素朴なおもちゃの例があなたを助けることを願っています。
cで、関数では
int x; // x is a variable of type int in stack
int *xp; // xp is a variable of type int * (pointer to int) in stack
int *xp2 = (int *) malloc(sizeof(int)); // xp2 is a variable in stack, it points to a memory location(size is of int) in heap
xp = &x; // xp can point to x
xp = xp2; // xp can also point to what xp2 points to
free(xp2); // now xp and xp2 point to a freed memory, BAD to use xp and xp2 now.
int **y; // y is a variable in stack, type is int **
y = (int **) malloc(sizeof(int *)); // allocate a piece of memory in heap, to hold a pointer to int(int *)
*y = (int *) malloc(sizeof(int)); // allocate a piece of memory in heap, to hold an int
**y = 100; // now we can use it
free(*y);
free(y);
C ++では、関数またはメンバー関数(方法)で、
SomeClass a1; // a1 is an object of type SomeClass in stack
SomeClass *a2 = new SomeClass(); // a2 is a pointer(in stack) pointing to an object(of type SomeClass) located in heap
delete a2;
したがって、C ++では、オブジェクトがスタックまたはヒープに存在する可能性があります
Javaで、関数または方法で、
SomeClass b1; // b1 is just a reference, no object exists yet
b1 = new SomeClass(); // in java, objects can only exist in heap
int x; // however, primitive types are in stack,
Objective-Cでは、関数または方法で、
SomeClass c1; // you can't do this.
SomeClass *c2 = [[SomeClass alloca] init]; // c1 is a pointer in stack, pointing to an object in heap
[c2 release];