2012-07-05 57 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