|
|
Log In | Not a Member? |
Contact ADC |
| < 前ページ次ページ > |
すべてのObjective-Cプログラムがインクルードする必要のあるObjective-Cヘッダファイルには、いくつかの識別子が定義されています。これらの識別子は、id、Class、SEL、IMP、BOOLです。
Objective-Cメソッドの内部では、コンパイラはC++のキーワードthisと同様に、識別子selfとsuperを事前宣言します。しかし、C++のキーワードthisとは異なり、selfとsuperはコンテキスト依存であるため、Objective-Cメソッドの外部でも通常の識別子として使用できます。
プロトコル内のメソッドのパラメータリストには、さらに5つのコンテキスト依存キーワードがあります(oneway、in、out、inout、bycopy)。これらは、他のコンテキストではキーワードになりません。
Objective-Cプログラマの観点から見ると、C++には新しいキーワードが多数追加されています。それでもC++キーワードはObjective-Cセレクタの一部として使用できるため、影響はそれほど大きくありません。しかし、Objective-Cクラスやインスタンス変数の指定にC++キーワードを使用することはできません。たとえば、classがC++キーワードであったとしても、依然としてNSObjectメソッドclassを使用できます。
[foo class]; // OK |
ただし、これはキーワードであるため、classを変数名として使用することはできません。
NSObject *class; // エラー |
Objective-Cでは、クラスとカテゴリの名前は別々のネームスペースに属します。つまり、@interface fooと@interface(foo)は、同じソースコード内に存在できます。Objective-C++では、C++クラスや構造体の名前と同じカテゴリを持つこともできます。
プロトコルとテンプレートの指定子は、異なる用途に同じ構文を使用します。
id<someProtocolName> foo; |
TemplateType<SomeTypeName> bar; |
このような曖昧さを避けるために、コンパイラではidをテンプレート名として使用することを認めていません。
最後に、次のように、ラベルの後にグローバル名を使用した式を続けた場合に、C++の構文解釈上の曖昧さが生じます。
label: ::global_name = 3; |
最初のコロンの後のスペースは必須です。Objective-C++にも同様の場合があり、やはりスペースが必須です。
receiver selector: ::global_c++_name; |
| < 前ページ次ページ > |
Last updated: 2007-10-31
|
Get information on Apple products.
Visit the Apple Store online or at retail locations. 1-800-MY-APPLE Copyright © 2007 Apple Inc. All rights reserved. | Terms of use | Privacy Notice |