2012-02-03 2 views
0

Appleは独自のカスタムクラスを作成するたびに、実際のオブジェクト自体ではなくオブジェクトへのポインタを作成することがよくあります。例えばObjective-Cでポインタを使用していますか?

、代わりにやって:

Class object 

を彼らは頻繁に行う:

Class *object = [[Class alloc] init]; 

はなぜポインタがとてもよく、スタック上のオブジェクトを置くのではなく、使用されていますか?これには何らかの技術的理由があるのですか?私はそうすることですぐに利益を得ることはできません。

EDIT:Objective-Cがスタック上のオブジェクトをサポートしていない場合、どのように非ポインタを作成できますか?私は人々がNSIntegerを直接使用するのを見たことがあります。

+2

C++でないため、 –

+0

NSIntegerはintのtypedefです。つまり、オブジェクトではなくプリミティブ型です。 – UIAdam

+0

@UIAdamありがとうございます。 – fdh

答えて

6

Objective-Cはスタック上のオブジェクトをサポートしていません。

マイク・アッシュさんのブログhere

+0

ブロックを除いては、技術的に客観的なオブジェクトであり、ローカル変数を使用するときにスタック上に作成されます。 – ughoavgfhw

0

*(ポインタ)は、このオブジェクトが保存されるメモリ内の地点を指します。また、これはobjective-cが書かれている方法です。プラス私は客観的なCはあなたがスタックにオブジェクトを置くことができないと思う!

+0

私は彼がポインタが何であるか知っていると思います。彼はなぜ彼らが使用されているのか尋ねています。 – edc1591

+0

ああ、私の悪い! – iProRage

0

オブジェクトが多く渡って渡された場合、参照を渡すよりもポインタを使用する方が簡単な場合があります。ポインタを渡していることを知っていると、参照渡しが見過ごされ、必要でないときに変更される可能性のあるものが変更される可能性があります。

+0

Objective-Cには、スタックオブジェクトのようなものがないのと同じようなことはありません。 –

+0

あなたはそこに行く、私はそれを知らなかった。ありがとう – smitec

1

のObjective-C通常の使用上のファンタスティックな説明は、オブジェクトがあらゆる場所に移動させる、彼らは万人の異なる場所から、アクセス変更および管理することができます。定義によると、オブジェクトを積み重ねるのは所有者が1人しかなく、その寿命と可用性はそれらを生成した関数(スレッド)に限られます。これは、オブジェクトの寿命が制御されないか、オブジェクトの寿命がアプリケーションと同じになるため(オブジェクトがどれくらいの量のメモリを使用したかを見たことがあるため)、Obj-Cの大きな問題となります。

関連する問題