Objective-C通过引用调用函数

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

要通过引用传递值,参数指针将像任何其他值一样传递给函数。 因此,需要将函数参数声明为指针类型,如以下函数swap()中所示,该函数swap()的参数指向两个整数变量的值。

/* 定义一个用来交换两个参数值的函数 */
- (void)swap:(int *)num1 andNum2:(int *)num2 {
   int temp;

   temp = *num1;  /* 保存 num1 的值到 temp  */
   *num1 = *num2; /* 将 num2 的值分配给 num1 */
   *num2 = temp;  /* 将 temp 的值分配给 num2 */

   return;
}

要查看有关Objective-指针的更多详细信息,可以查看Objective-C指针章节。

现在,通过引用传递值来调用函数swap(),如下例所示 -

#import <Foundation/Foundation.h>

@interface SampleClass:NSObject
/* 方法声明 */
- (void)swap:(int *)num1 andNum2:(int *)num2;
@end

@implementation SampleClass

- (void)swap:(int *)num1 andNum2:(int *)num2 {
   int temp;

   temp = *num1;  /* 保存 num1 的值到 temp  */
   *num1 = *num2; /* 将 num2 的值分配给 num1 */
   *num2 = temp;  /* 将 temp 的值分配给 num2 */

   return;

}

@end

int main () {

   /* 局部变量声明 */
   int a = 100;
   int b = 200;

   SampleClass *sampleClass = [[SampleClass alloc]init];

   NSLog(@"Before swap, value of a : %d\n", a );
   NSLog(@"Before swap, value of b : %d\n", b );

   /* 调用函数来交换参数的值 */
   [sampleClass swap:&a andNum2:&b];

   NSLog(@"After swap, value of a : %d\n", a );
   NSLog(@"After swap, value of b : %d\n", b );

   return 0;
}

执行上面示例代码,得到以下结果:

2018-11-15 01:38:32.473 main[137544] Before swap, value of a : 100
2018-11-15 01:38:32.475 main[137544] Before swap, value of b : 200
2018-11-15 01:38:32.475 main[137544] After swap, value of a : 200
2018-11-15 01:38:32.475 main[137544] After swap, value of b : 100

从上面输出的结果中可以看到,参数值的变化已经反映在函数之外,它不像按值调用那样,函数内的参数值变化不会反映在函数之外。


上一篇: Objective-C函数 下一篇: Objective-C块