1

所以这个问题是为了帮助我更好地理解 Cocoa-touch 框架的内部工作原理,这似乎是一个非常简单的问题。

如果您要使用 Xcode 创建命令行工具,例如,使用 Core Data,Xcode 会在“main.m”文件中生成方法,这些方法在括号中接收参数,而不是指示 Objective-C 的冒号。例如下面是生成的方法声明

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 文件是 C/C++ 文件而不是 Objective-C 文件,即使它们共享相同的文件扩展名?感谢您的任何见解!

4

2 回答 2

0

声明:

static NSManagedObjectContext *managedObjectContext();

是一个 C 函数,可以在 Objective-C 源文件中毫无问题地声明和定义。但是,您不能与在 C 源文件中声明 Objective-C 类和方法相反;例如这是非法的:

我的文件.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 回答