Objective-C 函数

函数是一起执行任务的一组语句。每个 Objective-C 程序都有一个 C 函数,即 main(),所有最普通的程序都可以定义其他函数。

您可以将代码分成不同的函数。如何在不同的函数之间划分代码取决于您自己,但逻辑上划分通常是为了让每个函数执行特定的任务。

函数 声明 告诉编译器函数的名称、返回类型和参数。函数 定义 提供了函数的实际主体。

基本上在 Objective-C 中,我们将函数称为方法。

Objective-C 基础框架提供了许多程序可以调用的内置方法。例如,方法 appendString() 将字符串附加到另一个字符串。

方法有各种名称,如函数、子程序或过程等。


定义一个方法

Objective-C 编程语言中方法定义的一般形式如下:

  1. - (return_type) method_name:( argumentType1 )argumentName1
  2. joiningArgument2:( argumentType2 )argumentName2 ...
  3. joiningArgumentn:( argumentTypen )argumentNamen {
  4. body of the function
  5. }

Objective-C 编程语言中的方法定义由 方法头方法主体 组成。以下是方法的所有部分:

  • 返回类型 − 方法可能返回值。return_type 是函数返回值的数据类型。有些方法在不返回值的情况下执行所需的操作。在这种情况下,return_type 就是 void
  • 方法名 − 这是方法的实际名称。方法名称和参数列表共同构成方法签名。
  • 参数 − 参数就像占位符。调用函数时,将值传递给参数。该值称为实际参数或参数。参数列表是指方法参数的类型、顺序和数量。参数是可选的;也就是说,方法可能不包含参数。
  • 联结参数 − 联接参数是为了使其更易于阅读并在调用时使其清晰明了。
  • 方法主体 − 方法主体包含一组语句,这些语句定义了方法的功能。

实例

以下是名为 max() 的方法的源代码。该方法采用两个参数 num1num2,并返回两者之间的最大值:

  1. /* function returning the max between two numbers */
  2. - (int) max:(int) num1 secondNumber:(int) num2 {
  3. /* local variable declaration */
  4. int result;
  5. if (num1 > num2) {
  6. result = num1;
  7. } else {
  8. result = num2;
  9. }
  10. return result;
  11. }

方法声明

方法 声明 告诉编译器函数名以及如何调用该方法。函数的实际主体可以单独定义。

方法声明包括以下部分:

  1. - (return_type) function_name:( argumentType1 )argumentName1
  2. joiningArgument2:( argumentType2 )argumentName2 ...
  3. joiningArgumentn:( argumentTypen )argumentNamen;

对于上述定义的函数 max(),下面是方法声明:

  1. -(int) max:(int)num1 andNum2:(int)num2;

当您在一个源文件中定义方法并在另一个文件中调用该方法时,需要方法声明。在这种情况下,您应该在调用该函数的文件的顶部声明该函数。


调用方法

在创建 Objective-C 方法时,需要定义函数必须执行的操作。要使用方法,您必须调用该函数来执行定义的任务。

当程序调用函数时,程序控制被转移到被调用的方法。被调用的方法执行定义的任务,当执行其返回语句或到达其函数结束括号时,它将程序控制返回给主程序。

要调用方法,只需传递所需的参数和方法名称,如果方法返回值,则可以存储返回的值。例如:

  1. #import <Foundation/Foundation.h>
  2. @interface SampleClass:NSObject
  3. /* method declaration */
  4. - (int)max:(int)num1 andNum2:(int)num2;
  5. @end
  6. @implementation SampleClass
  7. /* method returning the max between two numbers */
  8. - (int)max:(int)num1 andNum2:(int)num2 {
  9. /* local variable declaration */
  10. int result;
  11. if (num1 > num2) {
  12. result = num1;
  13. } else {
  14. result = num2;
  15. }
  16. return result;
  17. }
  18. @end
  19. int main () {
  20. /* local variable definition */
  21. int a = 100;
  22. int b = 200;
  23. int ret;
  24. SampleClass *sampleClass = [[SampleClass alloc]init];
  25. /* calling a method to get max value */
  26. ret = [sampleClass max:a andNum2:b];
  27. NSLog(@"Max value is : %d\n", ret );
  28. return 0;
  29. }

我保留了 max() 函数和 main() 函数,并编写了源代码。在运行最终可执行文件时,它将产生以下结果:

  1. 2022-07-07 22:28:45.912 demo[26080] Max value is : 200

函数参数

如果函数要使用参数,则必须声明接受参数值的变量。这些变量称为函数的 形式参数(形参)。

形式参数的行为类似于函数内的其他局部变量,在进入函数时创建,在退出时销毁。

调用函数时,有两种方法可以将参数传递给函数:

编号调用类型 & 描述
1值调用

该方法将参数的实际值复制到函数的形式参数中在这种情况下,对函数内参数所做的更改对参数没有影响。

2引用调用

该方法将参数的地址复制到形式参数中在函数内部,地址用于访问调用中使用的实际参数这意味着对参数所做的更改会影响参数。

默认情况下,Objective-C 使用按 值调用 传递参数。一般来说,这意味着函数中的代码无法更改用于调用该函数的参数,上述示例在调用 max() 函数时使用了相同的方法。