Objective-C函數

函數是一組一起執行任務的語句。 每個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()的方法的源代碼。 這個方法有兩個參數num1num2,並返回兩個參數的最大值 -

/* 返回兩個參數的最大值 */
- (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()函數時使用相同的方法。


上一篇: Objective-C決策 下一篇: Objective-C塊