1

したがって、この質問は、Cocoa-touchフレームワークの内部動作をよりよく理解するのに役立つものであり、非常に単純な質問のように思えるかもしれません。

Xcodeを使用して、たとえばCore Dataを使用してコマンドラインツールを作成する場合、Xcodeは、Objective-Cを示すコロンではなく、括弧内のパラメーターを取り込むメソッドを「main.m」ファイルに生成します。たとえば、生成されたメソッド宣言は次のとおりです

static NSManagedObjectContext *managedObjectContext()

ただし、メソッド内で送信されるObjective-Cメッセージはまだあります。例えば、

NSString *path = [[[NSProcessInfo processInfo] arguments] objectAtIndex:0];
path = [path stringByDeletingPathExtension];
NSURL *modelURL = [NSURL fileURLWithPath:[path stringByAppendingPathExtension:@"momd"]];
model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

これは、main.mファイルが同じファイル拡張子を共有していてもObjective-CファイルではなくC / C ++ファイルであるためですか?洞察をありがとう!

4

2 に答える 2

0

宣言:

static NSManagedObjectContext *managedObjectContext();

Objective-C ソース ファイル内で問題なく宣言および定義できる C 関数です。ただし、C ソース ファイル内で Objective-C のクラスとメソッドを宣言するのとは逆のことはできません。たとえば、これは違法です。

myfile.c:

@interface MyObject

- (int)nothing:(int)value
{
    return value;
}

@end
于 2012-07-05T15:32:03.130 に答える
-1

基本的に、Objective-C には C++ 静的メソッドの拡張バージョンと見なすことができる「クラス メソッド」がありますが、通常の C 関数と比較して、これらを使用してもメリットがないことがよくあります。

とにかくクラスがない場合はなおさらです (この場合、Objective-C のオーバーヘッドを追加するだけです)。

Objective-C が Objective-C と呼ばれる理由は、「Objective-」と「C」で構成されているからです。「C」の部分を無視する必要はありません。また、「実際の」違いがほとんどない、またはまったくない同じことを行うさまざまな方法があることも珍しくありません。

于 2012-07-05T17:11:15.187 に答える