Objective-C 入門指南 - NSString

NSString 是常用的字串 (string) 物件 (object) ,屬於不可變 (immutable) 的物件種類,裡頭可以放任何的 Unicode 字元




以上為 NSString 的常數 (constant) 形式, @ 後緊跟成對的雙引號,成對雙引號間即為 NSString 字串物件的內容。


為了有別於 C 語言的字串,因此 NSString 字串物件的常數形式為 @"" ,多了 @ 符號。


我們便是以常數形式建立 NSString 字串物件
// 建立三個 NSString 字串物件
NSString *s1 = @"\n\n這是 Objective-C 的第一個程式...\n";
NSString *s2 = @"使用 Foundation.h 中的 NSLog() 來輸出...\n";
NSString *s3 = @"程式執行結束...\n\n";


* 表示指標 (pointer) , Objective-C 中凡是指向物件的變數 (variable) 都必須用指標。


一般來說,建立物件大都先用 alloc 分配物件需要的記憶體空間,然後才用 init 之類的初始化方法完成,上例也可以改成
// 建立三個 NSString 字串物件
NSString *s1 = [[NSString alloc] initWithString: @"\n\n這是 Objective-C 的第一個程式...\n"];
NSString *s2 = [[NSString alloc] initWithString: @"使用 Foundation.h 中的 NSLog() 來輸出...\n"];
NSString *s3 = [[NSString alloc] initWithString: @"程式執行結束...\n\n"];


我們用常數直接指派給變數,主要是寫的簡潔一點。


C 語言的字串實際上是字元陣列 (character array) ,可用字元陣列的方式操作; NSString 屬於物件,因此有許多方法可以運用,以下列出常見的方法
功能名稱
初始化
- initWithCString:
- initWithFormat:
- initWithFormat:arguments:
- initWithString:
取得字串長度- length
取得字元
- characterAtIndex:
- getCharacters:range:
結合字串
- stringByAppendingFormat:
- stringByAppendingString:
分割字串
- substringFromIndex:
- substringWithRange:
- substringToIndex:


另外還有搜尋、替換、讀檔、存檔、改變大小寫等眾多功能的方法。


關於 NSString 的詳細定義與說明,請參考
String Programming Guide


NSString Class Reference


在 demo.m 中,我們就是利用 stringByAppendingString: 將字串合併
// 傳遞 stringByAppendingString 訊息給 s1 ,並以 s2 當參數
// 這是將 s2 接到 s1 的後頭,因此 s1 與 s2 會合併為一個字串
s1 = [s1 stringByAppendingString: s2];
// 以下為將 s1 與 s3 合併為一個字串
s1 = [s1 stringByAppendingString: s3];


先傳遞將 s2 接到 s1 後面的訊息,然後再傳遞 s3 接到 s1 後面的訊息,咦, NSString 不是不可變的嗎?也就是無法改變內容的物件。沒錯,可是 s1 是指向物件的指標而非物件本身,當以下
[s1 stringByAppendingString: s2];


完成後,會回傳一個新指標,然後我們將這個新指標重新指派給 s1 ,因為這是產生新的 NSString 字串物件,而非原本的 NSString 字串物件。


懂了嗎?接下來我們來詳細討論一下NSLog()吧!


中英文術語對照
字串string
物件object
不可變immutable
常數constant
指標pointer
變數variable
字元陣列character array


您可以繼續參考
基礎篇


相關目錄
Objective-C 入門指南
Objective-C 教材
首頁



參考資料
Learning Objective-C: A Primer
The Objective-C Programming Language
Cocoa Fundamentals Guide
Coding Guidelines for Cocoa
Advanced Memory Management Programming Guide
Archives and Serializations Programming Guide

沒有留言: