16

什么时候应该使用消息而不是 C 风格的函数?

4

3 回答 3

22

Objective-c 为您做出了区分。消息必须发送到对象,但函数可以随时使用。

留言

Objective-C 消息只能发送给对象,而消息系统是调用类方法的方式

例子:

// a class interface definition
// including a method named aMethod
@interface ANObject
{

}
- (void)aMethod;
@end


// a message sent to that object:
ANObject * myObject = [[ANObject alloc] init];
[myObject aMethod]; // <-- message
[myObject release];

功能

Objective-C 继承了所有 C 语言,因此当情况需要时,支持甚至鼓励 C 风格的函数调用。Objective-C 对象只是作为指针传递,所以你仍然可以将它们作为参数传递给函数。当然,应该遵守关于将指针传递给函数的常见注意事项和规则。

例子:

// a regular C-style function
void someFunction(ANObject * argument)
{
    // do something here...
}


// and how to call it:
someFunction(someObject);

什么时候使用每个?

当您想要访问对象/类的某些属性时,请使用消息/方法。很好的例子是访问 NSString 的长度:

int stringLength = [myString length];

设置属性的值:

[myObject setHidden:YES];

或者告诉一个对象执行一些任务:

[myAccount withdrawMoneyAndDriveToMexico];

当您想要执行不属于某个类的任务时,请使用 C 风格的函数;应该独立的东西。很好的例子是数学函数,例如:

double degrees = ConvertRadiansToDegrees(radians);
于 2009-05-05T18:32:47.003 回答
4

基本上,在处理 Objective C 组件的任何时候都使用消息;在您使用 NS* 类型时或多或少。

在任何情况下,您本质上都是在使用 C 函数调用;Objective C 的原始实现是 C 的预处理器。但是使用 Objective C 的全部意义在于获得类似于 Smalltalk 的语法,这就是你在 [] 中的任何地方所拥有的。

于 2009-05-05T18:33:02.010 回答
2

你问了很多 Java 问题。也许 Java 类比会有所帮助。在 Java 中使用方法的地方,在 Objective-C 中使用消息。在 Java 中使用静态方法的地方,在 Objective-C 中使用类方法。如果您发现自己在 Java 中创建了充满静态方法的实用程序包,那么作为 Objective-C 中的函数可能是有意义的。

而且,当然,如果你也在做奇怪的 Objective-C++ 东西,这可能是有道理的。

于 2009-05-05T18:37:58.223 回答