2012-07-05 39 views
1

所以这个问题是为了帮助我更好地理解Cocoa-touch框架的内部工作原理,它可能看起来像一个非常简单的问题。可可命令行工具方法声明

如果您要使用Xcode创建命令行工具,例如使用核心数据,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的文件,即使它们共享相同的文件扩展名?感谢您的任何见解!

回答

0

声明:

static NSManagedObjectContext *managedObjectContext(); 

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

myfile.c文件:

@interface MyObject 

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

@end 
+0

确实如此,但是您可以使用objc运行时在C中创建类:http://stackoverflow.com/questions/10289890/how-to-write-ios-app-purely-in-c/10290255#10290255 – 2012-07-05 17:16:52

-1

基本上,而Objective-C的具有可作为C++静态方法的扩展版本观察“类方法”,有一个在使用通常没有益处这些与普通的C函数相比。

无论如何,如果你还没有一个类,就更不用说了(在这种情况下,你只是增加了Objective-C的开销)。

Objective-C被称为Objective-C的原因:它由“Objective-”和“C”组成。没有必要忽略“C”部分。用不同的方式来做同样的事情并不少见甚至没有“真正的”差异。

+0

并非完全如此。 Obj-C中的类方法有一个主要优点:你可以使用'self'作为对象,传递给其他方法,委托或观察者,甚至添加iVars /关联对象! – 2012-07-05 17:16:01