我该如何在Objective-C中调用一个方法?

59

我正在尝试构建一个iPhone应用程序。我创建了一个这样的方法:

- (void)score {
    // some code
}

我已经尝试在另一个方法中调用它,就像这样:

- (void)score2 {
    @selector(score);
}

但它不起作用。 那么,我该如何正确调用一个方法?

8个回答

95

要在此实例中发送一个 Objective-C 消息,您需要执行以下操作:

[self score];

我建议你阅读Objective-C编程指南 Objective-C编程指南


32

我建议你阅读《Objective-C编程语言》。其中讲述的消息传递部分是你想要了解的内容,但整本书都会帮助你入门。之后,你可以尝试做一些教程来熟悉它,在开始开发自己的应用程序之前。


7
@fijiaaron说:“我没有说‘RTFM’,我是说这个问题非常基础,如果他必须要问,那么他在Objective-C的经历将会非常令人沮丧,阅读入门指南是走向正确道路的良好开端。你知道,授人以鱼不如授人以渔。就我个人而言,我觉得这种回答比未知质量的代码爆炸更有帮助。” - Chuck

25

调用该方法的方式如下

[className methodName] 

但是如果你想在同一个类中调用该方法,你可以使用self

[self methodName] 

以上所有内容之所以出现是因为您的方法没有使用任何参数。

然而,如果您的方法需要参数,您需要像这样执行:

[self methodName:Parameter]

这看起来很清晰,包括一个参数,这是有帮助的,即使不是针对简单的“分数”示例。 - Matt

24

我认为您尝试的是:

-(void) score2 {
    [self score];
}

[object message]语法是在Objective-C中调用方法的常规方法。我认为@selector语法是在需要在运行时确定要调用的方法时使用的,但是我对不够了解,无法提供更多信息。


@selector给你一个方法的“名称”,以Objective-C可以用来发送消息的形式。它的使用方式有些类似于函数指针。 - Chuck

5
请使用以下内容:
[self score]; you don't need @sel for calling directly

2
我一直在想,是否可以给一个方法添加延迟。虽然从未有过这样的需求,但总是想知道是否能够实现以及如何实现。:) 很不错。本来是为了一件事而来,结果却发现了有用的东西。 - Jiraheta

2

Objective-C语法如下:

returnObj = [object functionName: parameters];

其中,object是调用该方法的对象。如果你是从同一个对象中调用它,那么你需要使用'self'。这个教程可能会帮助你学习Obj-C。

在你的情况下,代码如下:

[self score];

如果你想传递参数,那么代码应该像这样:

- (void)score(int x) {
    // some code
}

我曾尝试在另一个方法中这样调用它:

- (void)score2 {
    [self score:x];
}

1
use this,
[self score]; 
instead of @selector(score).

-1
[self score]; instead of @selector(score)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接