所以这个问题是为了帮助我更好地理解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文件,即使它们共享相同的文件扩展名?感谢您的任何见解!
答案 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”部分。并且通过不同的方式做同样的事情并没有太少或甚至没有“真正的”差异,这种情况并不罕见。