Cocoa命令行工具方法声明

时间:2012-07-05 15:20:44

标签: objective-c cocoa command-line-tool

所以这个问题是为了帮助我更好地理解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文件,即使它们共享相同的文件扩展名?感谢您的任何见解!

2 个答案:

答案 0 :(得分:0)

宣言:

static NSManagedObjectContext *managedObjectContext();

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

myfile.c文件:

@interface MyObject

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

@end

答案 1 :(得分:-1)

基本上,虽然Objective-C具有可以被视为C ++静态方法的扩展版本的“类方法”,但与普通C函数相比,使用它们通常没有任何好处。

如果你还没有类,那就更不用了(在这种情况下你只是添加了Objective-C开销)。

Objective-C被称为Objective-C,原因是:它由“Objective-”和“C”组成。没有必要忽略“C”部分。并且通过不同的方式做同样的事情并没有太少或甚至没有“真正的”差异,这种情况并不罕见。