我们可以用C风格语法编写Objective-C代码吗?

时间:2012-03-02 05:04:20

标签: objective-c ios

我很难在Objective-C项目中找到C样式语法(例如,下面的语法不是如何在Objective-C中定义方法的本书)。我很清楚这是有效的,因为我编译的代码没有错误 - 但我不知道如何以及为什么,这段代码是常规的Objective-C .h, .m文件。有人可以解释这适合吗?

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
//use of round brackets 

void drawLinearGradient(CGContextRef context, CGRect rect, CGColorRef startColor, 
CGColorRef  endColor);
// C style syntax for passing params

此外,对于我到目前为止看到的核心图形代码,这是非常具体的,它是否允许编写这样的常规Objective-C方法或仅包含CG代码的文件......?

4 个答案:

答案 0 :(得分:4)

Objective-C只是C的超集,与C ++一样。 (两者最初都被实现为将代码转换为直接C代码的预处理器。)Objective-C方法调用被转换为对C函数objc_msgSend()及其变体的调用,并且可以(虽然单调乏味)直接调用它。

这里详细说明了血腥的细节:

https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html

答案 1 :(得分:3)

Core Graphics是一个C API,而不是Objective-C。由于Objective-C是C的超集,因此任何有效的C代码都可以在.m文件中编译得很好。

答案 2 :(得分:2)

Objective-C是C的超集,因此您可以在.m文件中定义普通的旧C函数,并且可以使用普通的C语法在.m文件中调用普通的旧C函数

CGColorSpaceCreateDeviceRGB函数是一个普通的旧函数。它是Core Graphics框架(也称为Quartz 2D)的一部分,它具有纯C API - API仅使用普通C,而不是Objective-C。

您不能使用普通的旧C函数语法定义Objective-C对象方法 - 您必须使用Objective-C方法语法。并且您不应该尝试使用普通的旧C语法向Objective-C对象发送消息 - 您应该使用Objective-C消息发送语法(方括号)。

答案 3 :(得分:0)

objc支持标准C,为什么你在objc项目中找到c代码。

对于Apple提供的框架,如果它具有core前缀,例如CG代表core graphic,则通常意味着它是用C语言编写的。