什么是' - >'运营商在Objective C中表示?

时间:2014-05-27 18:25:12

标签: java objective-c xcode operators

XCode刚刚将 . 运算符的使用更正为 -> 运算符。

我搜索了 -> 运算符的定义或文档,但可以找到。

我正在尝试模拟Java风格的实例变量。具体来说,我正在使用提供的 configuration 对象初始化一个实例,我希望在执行 initializeService 方法后继续使用该对象。< / p>

这个问题的一个很好的答案将提供与Java实例变量声明的比较以及通过实例方法的后续赋值。

XCode更正前的代码:

#import "MY_Service.h"
#import "MY_Configuration.h"

@implementation MY_Service {

    MY_Configuration *configuration;

}

-(void)initializeService:(MY_Configuration *)configuration
{
    self.configuration = configuration;

}


@end

XCode更正后的代码:

#import "MY_Service.h"
#import "MY_Configuration.h"

@implementation MY_Service {

    MY_Configuration *configuration;

}

-(void)initializeService:(MY_Configuration *)configuration
{
    self->configuration = configuration;

}


@end

3 个答案:

答案 0 :(得分:4)

->在Objective-C中与C中的相同。即:

a->b 

相当于

(*a).b

答案 1 :(得分:2)

->用于访问实例变量,与用于在C或C ++中访问指针的成员变量的方式相同。

在您提供的代码中,您将configuration声明为实例变量。如果你想使用点运算符,你应该将它声明为属性,这是你从一开始就应该做的。

答案 2 :(得分:2)

Objective-C实例变量通常以下划线为前缀。如果您更改声明以遵循此约定,则可以将作业重写为

_configuration = configuration;

关于声明属性或实例变量是否更好,这里没有绝对值,但属性声明确实具有某些优点。一些示例允许您为内存管理,原子性等指定其他内容,例如copy语义。但是您的代码正确地声明了一个可以按预期工作的私有实例变量。