2012-01-11 12 views
1

私は最近、APP-での作業中に、なぜそれはあなたがファイルをインポートするときにの#import文のObjective Cの中の文字列とchar配列の違い

#import "SomeFile.h" 

を使用することですが、あなたが操作しているときに、このことに気づいこのよう

NSLog(@"Hello World"); 

としてあなたが文字列の前に@記号を使用し、文字列、私はこれら二つは交換できません知っているので、#importディレクティブ文字列の種類をとらない具体的な理由はありますか?この背後にはいくつかの歴史/正当な理由がなければなりません。多分。御時間ありがとうございます!

答えて

0

#import文はコンパイラがあなたのコードをコンパイルするときに使用されるプリプロセッサマクロです。インポートしようとしているファイルが実際にコンパイルしているソースファイルに追加されていることを確認します。

コンパイラは、ファイルを見つけるために独自のタイプの文字列を取ります。 "を使用していない場合は、実際にCタイプの文字列、つまりchar[]が使用されています。 @""ディレクティブを使用する場合、実際にはタイプNSStringのオブジェクトがあります。これは最後にも0で終了する文字配列です。

基本的に、それらは両方の文字列です。しかし、@""ディレクティブはObjective Cで文字列オブジェクトを表すために使用され、標準の" "という表記法は下位言語の文字列型に使用されます。

+0

ああ...わかりました。ありがとう! –

2

これは、#importがプリプロセッサマクロであるため、objcランタイムがピクチャの一部でもある前にコンパイルされているためです。すべてのインポートは、#includeのラッパーで、同じファイルを2回は含まないようにしています。