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

Objective-C 入門實戰:NSString、NSArray、NSMutableArray 基礎操作

     編輯:關於C語言

Objective-C 入門實戰:NSString、NSArray、NSMutableArray 基礎操作

Objective-C 是蘋果生態系統的核心語言,採用 **Smalltalk 風格訊息傳遞** (`[obj msg]`) 與 **Foundation 框架**。本文透過兩個 Demo 實作,快速掌握字串比較、不可變/可變陣列操作,並解析語法特異點。

環境與工具鏈

  • **IDE**:Xcode (macOS 專屬)
  • **編譯器**:Clang (LLVM 前端)
  • **執行時**:Objective-C Runtime + ARC (自動參考計數)
  • **框架**:Foundation.framework (核心資料結構)

Demo 1:字串操作

// StringDemo.m
#import 

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *str1 = @"FansUnion";
        NSString *str2 = @"XiaoLei";
        NSString *str3 = @"XiaoLei";
        
        // 字串長度
        NSLog(@"str1 length: %lu", [str1 length]);
        
        // 字串比較 (內容比較,非指標比較)
        if ([str1 isEqualToString:str2]) {
            NSLog(@"str1 == str2");
        } else {
            NSLog(@"str1 != str2");
        }
        
        if ([str2 isEqualToString:str3]) {
            NSLog(@"str2 == str3");
        } else {
            NSLog(@"str2 != str3");
        }
    }
    return 0;
}

輸出結果

str1 length: 9
str1 != str2
str2 == str3

Demo 2:陣列操作

// NumberDemo.m
#import 

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // 不可變陣列
        NSArray *names = [NSArray arrayWithObjects:
                          @"FansUnion", @"XiaoLei", nil];
        NSLog(@"NSArray!");
        for (NSUInteger i = 0; i < [names count]; i++) {
            NSLog(@"%@", names[i]);  // 現代語法等同 [names objectAtIndex:i]
        }
        
        // 可變陣列
        NSMutableArray *numbers = [NSMutableArray array];
        for (int i = 0; i < 10; i++) {
            NSNumber *num = [NSNumber numberWithInteger:i];
            [numbers addObject:num];  // 訊息傳遞語法
        }
        
        for (NSUInteger i = 0; i < [numbers count]; i++) {
            NSLog(@"%@", numbers[i]);
        }
    }
    return 0;
}

輸出結果

NSArray!
FansUnion
XiaoLei
0
1
2
3
4
5
6
7
8
9

Objective-C 核心語法特異點解析

特性C/C++/JavaObjective-C說明
方法呼叫`obj.method()``[obj method]`訊息傳遞,動態綁定
帶參方法`obj.method(arg)``[obj methodWithArg:arg]`參數名內建於選擇器
字串字面量`"text"``@"text"`生成 NSString* 物件
數值封箱`Integer.valueOf(1)``@1` 或 `[NSNumber numberWithInt:1]`字面量語法糖
記憶體管理手動/GCARC (編譯器自動插入 retain/release)編譯期確定生命週期
介面宣告class/interface@interface / @implementation分離介面與實作

關鍵概念深度解析

1. 訊息傳遞 vs 函數調用

// C 風格:靜態綁定,編譯期決定調用位址
obj->method();

// OC 風格:動態派發,運行期查找 IMP
[obj method];
// 相當於:
// id (*msgSend)(id, SEL, ...) = (void*)objc_msgSend;
// msgSend(obj, @selector(method));

**優勢**:動態特性支援 Swizzling、KVO、延遲載入等進階模式。**代價**:間接跳轉開銷(現代 CPU 分支預測 + 快取已極小)。

2. NSString 不可變性

  • `NSString` 內容不可修改,任何「修改」操作實為創建新物件
  • 字面量 `@"..."` 存放於 `__TEXT.__cstring` 區,唯讀、壽命 = 程式壽命
  • 常用方法:`length`、`isEqualToString:`、`hasPrefix:`、`stringByAppendingString:`

3. NSArray vs NSMutableArray

從 Windows 遷移 macOS 開發的避坑指南

  1. 鍵盤映射:`Ctrl` ↔ `Cmd`、`Alt` ↔ `Option`,常用快捷鍵:`Cmd+B` 建置、`Cmd+R` 執行、`Cmd+Shift+K` 清理。
  2. 檔案系統:大小寫不敏感 (APFS 預設),路徑分隔符 `/`,無磁碟機代號。
  3. 終端機:預設 zsh,支援 Tab 補全、Homebrew 套件管理 (`brew install`)。
  4. 除錯:LLDB (而非 GDB),Xcode 視覺化除錯器極強大。

總結

Objective-C 的「中括號訊息傳遞」乍看奇葩,實則是**動態派發**的語法體現。掌握 `NSString`/`NSArray`/`NSMutableArray` 基礎操作、ARC 記憶體模型、Foundation 常用類別,即可開始編寫實用的 macOS/iOS 應用。建議配合《Objective-C Programming: The Big Nerd Ranch Guide》系統學習。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
操作NSArrayNSMutableArray
創建`[NSArray arrayWithObjects:..., nil]``[NSMutableArray array]`
新增❌`[arr addObject:obj]`
刪除❌`[arr removeObjectAtIndex:i]`
修改❌`[arr replaceObjectAtIndex:i withObject:obj]`
查詢`[arr objectAtIndex:i]` / `arr[i]`同左