iOS基礎-NSString及NSMutableString剖析

來源:互聯網
上載者:User

標籤:tab   cti   其他   search   equal   字串格式化   res   bsp   end   

一、NSString標頭檔

NSString : NSObject實現協議:NSCopying/NSMutableCopying/NSSecureCoding類別://擴充類別NSString (NSStringExtensionMethods)//此API是用來檢測給定未經處理資料的字串編碼NSString (NSStringEncodingDetection)
NSMutableString : NSString類別://可以實現子類的原始replaceCharactersInRange:範圍:方法NSMutableString (NSMutableStringExtensionMethods)

二、NSString的C底層實現

可以看到,兩種聲明出來的isa是不同的.
第一種isa是__NSCFConstantString,記憶體位址一樣.
第三種和其他objc對象類似的,在堆上分配記憶體.

三、深拷貝和淺拷貝

先做個小測試

 

 

可以很明顯的看出來,我們進行的copy操作為淺拷貝,兩個指標(str1和str2)指向的是同一塊記憶體位址,

我們進行的mutableCopy操作為深拷貝,指向的是兩Block Storage相同內容的記憶體位址.原因是mutableCopy操作是將其拷貝到堆上.引用計數加1.

下面我們分別測試NSString和NSMutableString
先看NSString



@"123"儲存在文字常量區,從我們可以很清楚的看到
指標str1和指標str2指向同一記憶體位址
當str1改變內容後,建立了新的對象,則str1指向另一塊記憶體位址
將str1置為nil,完全不影響str2
所以,NSString為淺拷貝

再來測試NSMutableString



從我們可以看到
mutableStr1和mutableStr2雖然內容相同,但指向的是不同的記憶體位址
改變內容後,仍然是指向自己的記憶體位址
所以, NSMutableString為深拷貝

總結淺拷貝:指標拷貝,指標與原指標地址相同,沒有建立新的對象。深拷貝:內容拷貝,建立了新的對象,指標地址與原對象的指標地址不同。1- 對一個NSString字串進行copy不會產生新對象(淺拷貝)2- 對一個NSMutableString字串進行copy會產生新對象(深拷貝)3- copy產生的新對象為NSString類型4- mutableCopy產生的新對象為NSMutableString類型

四、接下來整理一下NSString和NSMutableString的常用方法

NSString常用

擷取字串索引計數(可識別數字/字母/符號/空格,不可識別中文,顯示是亂碼)- (unichar)characterAtIndex:(NSUInteger)index;這個不知道是什麼- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder

NSString (NSStringExtensionMethods)常用

設定字串內容(全部大寫,全部小寫,首字母大寫)

@property (readonly, copy) NSString *uppercaseString;@property (readonly, copy) NSString *lowercaseString;@property (readonly, copy) NSString *capitalizedString;

字串截取

以指定位置開始(包含指定位置的字元),包括之後的全部字元- (NSString *)substringFromIndex:(NSUInteger)from;從字串的開頭一直截取到指定位置,但不包括該位置的字元- (NSString *)substringToIndex:(NSUInteger)to;按照所給出的位置,長度,從字串截取子串- (NSString *)substringWithRange:(NSRange)range;

字串比較

compare方法(NSComparisonResult是定義的一個枚舉,完全一致為0,其餘為其他(有1和-1))字串比較(必須完全一樣,大小寫不一致,有空格則均返回1)- (NSComparisonResult)compare:(NSString *)string;比較字串是否完全相等- (BOOL)isEqualToString:(NSString *)aString;不考慮大小寫比較字串,相同為0,不相同為其他- (NSComparisonResult)caseInsensitiveCompare:(NSString *)string;檢查字串是否以另一字串開頭(true為1,false為0)- (BOOL)hasPrefix:(NSString *)str;檢查字串是否以另一字串結尾(true為1,false為0)- (BOOL)hasSuffix:(NSString *)str;

字串尋找(如果range.length長度大於0,證明有要尋找的子串,否則證明沒有)

尋找字串某處是否包含其他字串- (NSRange)rangeOfString:(NSString *)searchString;根據參數options的不同,按照不同的規則尋找- (NSRange)rangeOfString:(NSString *)searchString options:(NSStringCompareOptions)mask;

字串合并

字串與字串的合并- (NSString *)stringByAppendingString:(NSString *)aString;字串與字串或其它類型資料合併- (NSString *)stringByAppendingFormat:(NSString *)format;字串格式化合并(instancetype)stringWithFormat:(NSString *)format;

字串替換

將字串中的**全部替換成**- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement將某一位置的或者搜尋出來的字串替換成一個新的字串- (NSString *)stringByReplacingCharactersInRange:(NSRange)range withString:(NSString *)replacement;

字串建立及賦值

建立字串並賦值(instancetype)initWithString:(NSString *)aString;經典的字串賦值(instancetype)string;字串賦值,參數只可寫一個字串(instancetype)stringWithString:(NSString *)string;

字串寫入檔案

- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error;

從檔案中讀取字串,並經過轉碼(保證讀出的中文不是亂碼)

+ (nullable instancetype)stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error;

 NSMutableString常用

字串替換

將字串中制定位置,長度的字串替換成其他字串- (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString;

NSMutableString (NSMutableStringExtensionMethods)常用

設定字串內容- (void)setString:(NSString *)aString;在指定位置插入字串- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc;- (void)appendString:(NSString *)aString;- (void)appendFormat:(NSString *)format;

iOS基礎-NSString及NSMutableString剖析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.