繁体   English   中英

Smalltalk风格的消息与C风格的功能

[英]Smalltalk-style Messages vs. C-style Functions

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

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);

基本上,每当您处理Objective C组件时都使用消息; 或多或少,无论何时使用NS *类型。

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

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

当然,如果你正在做一些奇怪的Objective-C ++,那也许有意义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM