如何在Objective-C中引用当前对象中的方法?是否有像Java这样的 this 关键字?
这是一些澄清的假代码:
@implementation FooBard
- (void) foo {
i = 1
m = [this bar: i];
}
- (int) bar: int j {
k = j - 1;
return (k);
}
@end
在Java中我只会做 this.bar()并完成它。
答案 0 :(得分:4)
m = [self bar:i];
答案 1 :(得分:2)
所有Objective-C方法都获得一个名为self
的隐式参数,它是一个类型为id
的堆栈变量,指向当前实例。实际上,如果前两个参数的类型为id
和SEL
,则任何C函数都可以用作Objective-C方法。(见下文)。
self
不是Objective-C中的保留关键字,如Java中的this
。例如,您可以在方法中重新分配self
。这是init
方法中的标准模式:
-(id)init {
if( (self = [super init]) ) {
// do initialization here
}
return self;
}
但重新分配self
很少在其他任何情况下使用。
您可以像self
中的任何其他变量一样使用id
:[self bar:i]
在您提供的示例中。
为了完整性,所有Objective-C方法也会获得一个名为_cmd
的隐含参数,它是被调用方法的选择器(类型SEL
)。有关详细信息,请参阅Objetive-C Runtime Reference。