函數是一組一起執行任務的語句。 每個Objective-C程式都有一個C函數,也就是main()
函數,所有最簡單的程式都可以定義為函數。
可將代碼劃分為單獨的函數。如何在不同的函數之間劃分代碼取決於程式員,但邏輯上這個劃分通常是這樣,每個函數執行一個特定的任務。
函數聲明告訴編譯器函數的名稱,返回類型和參數。 函數定義提供函數的實際主體。
在Objective-C中,基本上會將函數稱為方法。
Objective-C基礎框架提供了程式可以調用的許多內置方法。 例如,appendString()
方法將字串附加到另一個字串。
已知一種方法具有各種名稱,如函數或副程式或程式等。
1. 定義方法
Objective-C編程語言中方法定義的一般形式如下 -
- (return_type) method_name:( argumentType1 )argumentName1
joiningArgument2:( argumentType2 )argumentName2 ...
joiningArgumentn:( argumentTypen )argumentNamen {
body of the function
}
Objective-C編程語言中的方法定義由方法頭和方法體組成。 以下是方法的所有部分 -
- 返回類型 - 方法可以返回值。
return_type
是函數返回的值的數據類型。 某些方法執行所需的操作而不返回值。 在這種情況下,return_type
是關鍵字void
。 - 方法名稱 - 這是方法的實際名稱。方法名稱和參數列表一起構成方法簽名。
- 參數 - 參數就像一個占位符。調用函數時,將值傳遞給參數。該值稱為實際參數或參數。參數列表指的是方法的參數的類型,順序和數量。 參數是可選的; 也就是說,方法可能不包含任何參數。
- 連接參數 - 一個連接的參數是讓它更易於閱讀並在調用時清楚地表達它。
- 方法體 - 方法體包含一組語句,用於定義方法的作用。
示例
以下是名為max()
的方法的源代碼。 這個方法有兩個參數num1
和num2
,並返回兩個參數的最大值 -
/* 返回兩個參數的最大值 */
- (int) max:(int) num1 secondNumber:(int) num2 {
/* 局部變數聲明 */
int result;
if (num1 > num2) {
result = num1;
} else {
result = num2;
}
return result;
}
2. 方法聲明
方法聲明告訴編譯器有關函數名稱以及如何調用該方法的資訊。 函數的實際主體可以單獨定義。
方法聲明包含以下部分 -
- (return_type) function_name:( argumentType1 )argumentName1
joiningArgument2:( argumentType2 )argumentName2 ...
joiningArgumentn:( argumentTypen )argumentNamen;
對於上面定義的max()
函數,以下是方法聲明 -
-(int) max:(int)num1 andNum2:(int)num2;
在一個原始檔案中定義方法並在另一個檔中調用該方法時,需要方法聲明。 在這種情況下,應該在調用該函數的檔頂部聲明該函數。
3. 調用方法
在創建Objective-C方法時,可以定義函數必須執行的操作。 要使用方法,必須調用該函數來執行定義的任務。
當程式調用函數時,程式控制將轉移到被調用的方法。 被調用的方法執行已定義的任務,當執行其返回語句或達到其函數結束右括弧時,它將程式控制返回給主程序。
要調用方法,只需要傳遞必需的參數和方法名稱,如果方法返回值,則可以存儲返回的值。 例如 -
#import <Foundation/Foundation.h>
@interface SampleClass:NSObject
/* 方法聲明 */
- (int)max:(int)num1 andNum2:(int)num2;
@end
@implementation SampleClass
/* 返回兩個數的最大值 */
- (int)max:(int)num1 andNum2:(int)num2 {
/* 聲明局部變數 */
int result;
if (num1 > num2) {
result = num1;
} else {
result = num2;
}
return result;
}
@end
int main () {
/* 定義局部變數 */
int a = 119;
int b = 199;
int ret;
SampleClass *sampleClass = [[SampleClass alloc]init];
/* 調用方法來獲取最大值 */
ret = [sampleClass max:a andNum2:b];
NSLog(@"Max value is : %d\n", ret );
return 0;
}
執行上面示例代碼,得到以下結果:
2018-11-15 01:18:49.962 main[43680] Max value is : 199
4. 函數參數
這些變數稱為函數的形式參數。形式參數的行為與函數內部的其他局部變數相似,並在進入函數時創建,並在退出時銷毀。
在調用函數時,有兩種方法可以將參數傳遞給函數 -
編號 | 調用類型 | 描述 |
---|---|---|
1 | 按值調用 | 此方法將參數的實際值複製到函數的形式參數中。在這種情況中,對函數內部參數所做的更改不會對參數產生影響。 |
2 | 按引用調用 | 此方法將參數的地址複製到形式參數中。在函數內部,該地址用於訪問調用中使用的實際參數。對參數所做的更改會影響參數。 |
默認情況下,Objective-C使用按值調用來傳遞參數。 所以函數內的代碼改變用於調用函數的參數不會反應到函數外部,而上述示例在調用max()
函數時使用相同的方法。