引用当前对象中的方法

时间:2009-05-27 18:59:49

标签: objective-c

如何在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()并完成它。

2 个答案:

答案 0 :(得分:4)

m = [self bar:i];

答案 1 :(得分:2)

所有Objective-C方法都获得一个名为self的隐式参数,它是一个类型为id的堆栈变量,指向当前实例。实际上,如果前两个参数的类型为idSEL,则任何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