3

私はObjectiveCを使い始めたばかりで、ペースと学習曲線は大丈夫ですが(Cのバックグラウンドはありません)、C ++の一部でもある1つの概念がわかりません-ポインター!

OK-ポインタは、変数自体の値ではなく、実際の変数の物理的な場所を指していることを理解しています。いったいいつそれが役に立つのだろうか?

また、いつ使用するのか、いつ使用しないのですか?

私は十分にグーグルで検索しましたが、私が出くわすすべてのガイドは、私がロケット科学の博士号を取得していると想定しているようです。

誰かがこれを簡単な例で説明できますか?

4

3 に答える 3

2

これらはもちろん C ポインターですが、オブジェクトへの参照として理解することを強くお勧めします。

オブジェクトを作成するか、どこかから受け取って、そのオブジェクトへの参照を変数名に格納します。

オブジェクトへの参照を何らかの関数またはメソッドに渡すと、このメソッドは、渡したオブジェクトそのものにアクセスできます。必ずしもデータのコピーを操作する必要はありません。オブジェクトのプロパティに変更を加えると (poperty 宣言などによって許可されている限り)、参照が参照しているオブジェクトそのものが変更されます。

もちろん、それが適切であると思われる場合はいつでも、それをコピーして、そのコピーで作業を続けることができます。その場合、元のオブジェクトは変更されません。

実際に C スタイルのポインターを使用する必要がある状況に陥った場合は、一歩下がって C を理解することをお勧めします。私は、Objecive-C のバックグラウンドから来たときに C スタイルのポインターを理解するのは賢明ではないと思います。頭を空っぽにして C をゼロから学び、その後、Objective-C プロジェクトでこれらの基本的なデータ型を扱わなければならない非常にまれな状況で、新しいノウハウを活用してください。

于 2012-08-22T10:09:51.747 に答える
2

ポインターが使用される主な理由の 1 つは、メモリを節約することです。たとえば、配列を関数に渡す場合、値を送信するよりもメモリ内のアドレスを関数に送信する方が適切です。

c やその他の低レベル言語に進むと、配列とポインターがほとんど交換可能であることがわかります。(objc の NSMutableArrays や c++ のベクトル、c# のリストなどではなく、C スタイルの配列)

于 2012-08-22T09:45:00.333 に答える
1

簡単な理由は次のとおりです。

非常に大きなオブジェクトがあると想像してください。- 関数に渡すとき、オブジェクト全体をコピーして複製しますか? - これには、多くの CPU とメモリが必要です。

ポインタを使用すると、元のオブジェクトを渡すたびにコピーする必要がなくなります。(もちろん、関数内のオブジェクトを変更すると、元のオブジェクトも変更されます)。

于 2012-08-22T10:36:30.533 に答える