字符串處理是iOS/macOS開發中最高頻的操作之一。Objective-C提供了NSString(不可變)和NSMutableString(可變)兩大核心類,功能強大且設計精妙。本文系統梳理創建、比較、搜索、修改、文件操作等核心用法,助你高效駕馭字符串處理。
1. 多樣化的創建方式
// 常量字符串(編譯時確定) NSString *str1 = @"This is a String!"; // 空字符串後賦值 NSString *str2 = [[NSString alloc] init]; str2 = @"This is a String!"; // 高效創建: initWithString NSString *str3 = [[NSString alloc] initWithString:@"This is a String!"]; // C字符串轉換 char *cStr = "This is a String!"; NSString *str4 = [[NSString alloc] initWithCString:cStr encoding:NSUTF8StringEncoding]; // 格式化字符串 int i = 1, j = 2; NSString *str5 = [[NSString alloc] initWithFormat:@"%d. This is %d string!", i, j]; // 自動釋放的臨時字符串(ARC環境下推薦) NSString *tempStr = [NSString stringWithFormat:@"Temporary: %d", 100];
2. 文件讀寫操作
3. 字符串比較(重點掌握)
s2 */ } // 不區分大小寫比較 BOOL caseInsensitive = [s1 caseInsensitiveCompare:s2] == NSOrderedSame; // YES // 選項組合比較(不區分大小寫+數字感知排序) NSComparisonResult res = [s1 compare:s2 options:NSCaseInsensitiveSearch | NSNumericSearch];4. 大小轉換與搜索
5. 路徑操作實用方法
NSMutableString可變字符串高效操作
1. 創建與容量預分配
NSMutableString *str = [NSMutableString stringWithString:@"Initial"]; // 追加 [str appendString:@", appended"]; [str appendFormat:@", formatted %d", 123]; // 插入 [str insertString:@"[START] " atIndex:0]; // 刪除指定範圍 [str deleteCharactersInRange:NSMakeRange(0, 7)]; // 刪除"[START] " // 替換 [str replaceCharactersInRange:NSMakeRange(0, 8) withString:@"New"]; // 將"Initial"替換為"New" // 完全替換內容 [str setString:@"Completely new content"];3. 前綴後綴檢查
內存管理與最佳實踐
stringWithFormat:等)創建自動釋放對象,手動alloc/init需注意所有權轉移NSMutableString,預分配容量減少擴容開銷NSUTF8StringEncodingNSMutableString非線程安全,多線程訪問需加鎖if (str1 == str2) → ✅ [str1 isEqualToString:str2]initWithCString: → ✅ initWithCString:encoding:NSMutableString給期望NSString的API時需注意副作用NSRange操作前必須檢查location != NSNotFoundSwift中String與NSString無縫橋接:
掌握Objective-C字符串操作精髓,不僅能編寫高效健壯的代碼,更能深入理解Foundation框架的設計哲學。建議在實際項目中根據場景選擇不可變/可變字符串,善用格式化、編碼轉換、範圍操作等核心API。