2009-07-15 14 views
1

誰かがなぜ行に*があるのか​​教えていただけますか?ココア変数の宣言

宣言はどういう意味ですか?

NSString *someString; 

は君たちをありがとう

編集:

が、それは私に多くのことができますが、時々私は 例*なしの宣言を参照してくださいありがとう:

BOOL areTheyDifferent。なぜこの宣言にポインタがないのですか?

+1

他の人は、変数がNSStringへのポインタであることを示していることを指摘している人もいます。次のステップとして、Cのような言語に適用されるように、スカラー、ポインタ、スタック、ヒープという用語をよく理解するのに役立つかもしれません。 –

答えて

4

*文字(Objective-Cのは住んでいる)Cの世界では "ポインタ"

someStringNSStringオブジェクトへのポインタであることを意味します。

Objective-Cでは、すべてのオブジェクトがポインタとして渡されるため、その事実を心配することはめったにありません。そのsomeString変数をそのままNSStringクラスのインスタンスであるかのように扱います。

0

これは、これがNSStringへのポインタであることをコンパイラに伝えます。

-1

'bool'は、コンパイラの組み込み型です。コンパイラがネイティブに理解するすべてのプリミティブ型に対して、そのようなオブジェクトへのポインタを作成する必要はありません。 目的のCクラスの場合、ポインターは言語の設計のために常に必要です。

それはあなたがオブジェクト自体を保持しているとして、変数を宣言することはできません...

+2

'bool'が組み込まれています(少なくともC99の下に組み込み型 '_Bool'をラップするマクロ)ですが、' BOOL'はそうではありません。 'BOOL'、' YES'、および 'NO'はObjective-Cヘッダによって定義されるすべてのマクロです。 –

2

数行で説明するのは少し難しいです。オブジェクトへのポインタを保持するものとしてのみ宣言できます。 BOOLはオブジェクトではないので、1つのポインタの代わりにBOOLを含む変数を持つことは問題ありません。 NSRangeNSRectなどの数値型の構造体も同様です。Objective-Cクラスのインスタンスではないものはすべてです。

なぜNeXT/Appleがこの制限を追加したのか分かりません。私が正しく覚えていれば、AppleのGCCのバージョンにしか存在しません。 GNUstepにはそれがありません。つまり、GNUstepバージョンでは、オブジェクトを保持する変数を宣言することができます(NSString myString)。 GNUstepを自分で使ったことは一度もありませんでしたが、私はそのような変数が本当に実用的であるかどうかわかりません。

+0

インライン/サックオブジェクトをサポートしない理由の1つは、保持と解放をサポートすることです。スタックオブジェクトや別のオブジェクト/構造体に埋め込まれたオブジェクトを保持することは、コンテナとは独立して実行できないため、実際には意味をなさない。 –