Objective-C 函數按值調用
按值傳遞參數給函數的方法調用複製到正式參數的函數參數的實際值。在這種情況下,該函數內的參數所做的更改參數沒有影響。
默認情況下,使用的Objective-C編程語言調用值法來傳遞參數。在一般情況下,這意味着,在一個函數中的代碼可以用來調用該函數的參數不會改變。考慮函數swap()定義如下:
/* function definition to swap the values */ - (void)swap:(int)num1 andNum2:(int)num2 { int temp; temp = num1; /* save the value of num1 */ num1 = num2; /* put num2 into num1 */ num2 = temp; /* put temp into num2 */ return; }
現在,讓我們通過在下面的示例中的實際值作爲調用函數swap():
#import <Foundation/Foundation.h> @interface SampleClass:NSObject /* method declaration */ - (void)swap:(int)num1 andNum2:(int)num2; @end @implementation SampleClass - (void)swap:(int)num1 andNum2:(int)num2 { int temp; temp = num1; /* save the value of num1 */ num1 = num2; /* put num2 into num1 */ num2 = temp; /* put temp into num2 */ } @end int main () { /* local variable definition */ int a = 100; int b = 200; SampleClass *sampleClass = [[SampleClass alloc]init]; NSLog(@"Before swap, value of a : %d
", a ); NSLog(@"Before swap, value of b : %d
", b ); /* calling a function to swap the values */ [sampleClass swap:a andNum2:b]; NSLog(@"After swap, value of a : %d
", a ); NSLog(@"After swap, value of b : %d
", b ); return 0; }
讓我們編譯並執行它,它會產生以下結果:
2013-09-09 12:12:42.011 demo[13488] Before swap, value of a : 100
2013-09-09 12:12:42.011 demo[13488] Before swap, value of b : 200
2013-09-09 12:12:42.011 demo[13488] After swap, value of a : 100
2013-09-09 12:12:42.011 demo[13488] After swap, value of b : 200
這表明,儘管它們均已改變,在函數內部的值中沒有任何改變。