首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Objective-C 入門:對象創建、消息發送與多參數方法語法

     編輯:關於C語言

Objective-C 入門:對象創建、消息發送與多參數方法語法

Objective-C 作為 C 的超集,引入 Smalltalk 風格的消息機制。本文通過極簡示例演示對象構造、實例/類方法調用,重點解析多參數方法的獨特語法。

一、核心概念速覽

  • 類定義:@interface / @implementation 分離聲明與實現
  • 對象分配:[[Class alloc] init] 兩步驟(分配 + 初始化)
  • 消息發送:[receiver message] 動態綁定,運行時決議
  • 多參數方法:選擇器包含所有冒號,如 setName:andAge:

二、Person 類定義

// Person.h
#import 

@interface Person : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSInteger age;

// 實例方法
- (void)say:(NSString *)words;
- (void)setName:(NSString *)name andAge:(NSInteger)age;
- (void)info;

// 類方法
+ (void)bye;
@end

// Person.m
#import "Person.h"

@implementation Person

- (void)say:(NSString *)words {
    NSLog(@"Hi, I am %@", words);
}

- (void)setName:(NSString *)name andAge:(NSInteger)age {
    _name = name;
    _age = age;
}

- (void)info {
    NSLog(@"I am info method, name=%@, age=%ld", _name, _age);
}

+ (void)bye {
    NSLog(@"bye bye !");
}
@end

三、主程序調用示例

// main.m
#import 
#import "Person.h"

int main(int argc, const char *argv[]) {
    @autoreleasepool {
        // 1. 構造對象:alloc + init
        Person *person = [[Person alloc] init];
        
        // 2. 單參數實例方法
        [person say:@"I am FansUnion"];
        
        // 3. 多參數實例方法 —— 關鍵語法點
        [person setName:@"小雷FansUnion" andAge:26];
        // 選擇器完整名稱:setName:andAge:
        // 參數交織在選擇器片段中,極具可讀性
        
        // 4. 無參實例方法
        [person info];
        
        // 5. 無參類方法
        [Person bye];
    }
    return 0;
}

四、運行輸出

2015-12-03 20:57:39.023 ObjectPerson[6193:440740] I am test method
2015-12-03 20:57:39.025 ObjectPerson[6193:440740] Hi, I am FansUnion
2015-12-03 20:57:39.025 ObjectPerson[6193:440740] I am info method
2015-12-03 20:57:39.025 ObjectPerson[6193:440740] bye bye !
Program ended with exit code: 0

五、多參數方法語法深度解析

對比:C/C++/Java vs Objective-C

語言調用語法特點
CsetNameAndAge(person, "Tom", 20);函數調用,參數位置固定
C++person.setNameAndAge("Tom", 20);成員函數,參數位置固定
Javaperson.setNameAndAge("Tom", 20);方法調用,參數位置固定
Objective-C[person setName:@"Tom" andAge:20];消息發送,參數內嵌在選擇器中

選擇器命名規則

  • 每個冒號對應一個參數
  • 選擇器片段描述參數語義:setName:andAge:
  • 完整選擇器字符串:"setName:andAge:"(含兩個冒號)
  • 運行時通過 NSSelectorFromString(@"setName:andAge:") 動態獲取

為什麼這樣設計?

  1. 自文檔化:調用處即可讀懂每個參數含義,無需跳轉定義
  2. 動態性:選擇器是字符串,支持運行時動態調用、交換方法實現
  3. 命名空間隔離:setName:andAge: 與 setName:andHeight: 完全不同,避免重載衝突

六、常見坑點提示

  • ❌ [person setName:@"Tom", 20]; —— 逗號分隔是錯誤的
  • ❌ [person setNameAndAge:@"Tom" :20]; —— 缺少第二參數標籤
  • ✅ 正確:[person setName:@"Tom" andAge:20];
  • 屬性語法糖:person.name = @"Tom"; person.age = 20;(編譯器轉為 setter 消息)

七、總結

Objective-C 的消息機制與多參數選擇器語法雖然初學者感到陌生,但體現了「代碼即文檔」的設計哲學。掌握 alloc/init 兩階段構造、實例/類方法區分、選擇器命名規範,是進階學習 Cocoa 框架的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved