Objective-C 函式



函式是由一些語句組成的,這些語句一起執行一項任務。每個 Objective-C 程式都有一個 C 函式,即main(),並且所有最簡單的程式都可以定義附加函式。

您可以將程式碼分成單獨的函式。如何將程式碼劃分到不同的函式中取決於您,但邏輯上,劃分通常是讓每個函式執行特定任務。

函式宣告告訴編譯器函式的名稱、返回型別和引數。函式定義提供函式的實際主體。

基本上,在 Objective-C 中,我們將函式稱為方法。

Objective-C Foundation 框架提供了許多內建方法,您的程式可以呼叫這些方法。例如,方法appendString()用於將字串附加到另一個字串。

方法也稱為函式、子程式或過程等。

定義方法

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,並返回兩者之間的最大值:

/* function returning the max between two numbers */
- (int) max:(int) num1 secondNumber:(int) num2 {
   
   /* local variable declaration */
   int result;
 
   if (num1 > num2) {
      result = num1;
   } else {
      result = num2;
   }
 
   return result; 
}

方法宣告

方法宣告告訴編譯器函式名稱以及如何呼叫該方法。函式的實際主體可以單獨定義。

方法宣告包含以下部分:

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

對於上面定義的函式 max(),方法宣告如下:

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

當您在一個原始檔中定義一個方法並在另一個檔案中呼叫該方法時,需要方法宣告。在這種情況下,您應該在呼叫函式的檔案頂部宣告該函式。

呼叫方法

建立 Objective-C 方法時,您會給出函式必須執行的操作的定義。要使用方法,您必須呼叫該函式來執行定義的任務。

當程式呼叫函式時,程式控制權將轉移到被呼叫的方法。被呼叫的方法執行定義的任務,當執行其 return 語句或到達其函式結束的閉合大括號時,它會將程式控制權返回到主程式。

要呼叫方法,您只需傳遞所需的引數以及方法名稱,如果方法返回值,則可以儲存返回值。例如:

#import <Foundation/Foundation.h>

@interface SampleClass:NSObject
/* method declaration */
- (int)max:(int)num1 andNum2:(int)num2;
@end

@implementation SampleClass

/* method returning the max between two numbers */
- (int)max:(int)num1 andNum2:(int)num2 {

   /* local variable declaration */
   int result;
 
   if (num1 > num2) {
      result = num1;
   } else {
      result = num2;
   }
 
   return result; 
}

@end

int main () {
   
   /* local variable definition */
   int a = 100;
   int b = 200;
   int ret;
   
   SampleClass *sampleClass = [[SampleClass alloc]init];

   /* calling a method to get max value */
   ret = [sampleClass max:a andNum2:b];
 
   NSLog(@"Max value is : %d\n", ret );
   return 0;
}

我把 max() 函式和 main() 函式放在一起,並編譯了原始碼。執行最終的可執行檔案時,它將產生以下結果:

2013-09-07 22:28:45.912 demo[26080] Max value is : 200

函式引數

如果函式要使用引數,則必須宣告接受引數值的變數。這些變數稱為函式的形式引數

形式引數在函式內部的行為與其他區域性變數相同,並在進入函式時建立,並在退出函式時銷燬。

呼叫函式時,引數可以透過兩種方式傳遞給函式:

序號 呼叫型別和描述
1 按值呼叫

此方法將引數的實際值複製到函式的形式引數中。在這種情況下,對函式內部引數所做的更改不會影響引數。

2 按引用呼叫

此方法將引數的地址複製到形式引數中。在函式內部,該地址用於訪問呼叫中使用的實際引數。這意味著對引數所做的更改會影響引數。

預設情況下,Objective-C 使用按值呼叫傳遞引數。一般來說,這意味著函式中的程式碼無法更改用於呼叫函式的引數,並且上述示例在呼叫 max() 函式時使用了相同的方法。

廣告