2011-04-07 58 views
56

我有一個NSMutableString,如何將它轉換爲NSString?目標C:在NSString中轉換一個NSMutableString

+2

從最近的(今天的)問題的歷史看起來你應該把你的手一個像樣的書可可獲得一個基本的想法事物如何在ObjC世界中發揮作用。亞倫Hillegass的書是一個非常好的開始。另外請查看http://cocoadevcentral.com/更多內容:發佈六個基本相同的問題(String-> CSV)的六個稍微不同的版本,其中我猜這個問題也涉及到這個問題,對你無能爲力。你只是發送垃圾郵件,並最終讓人們忽略你的問題。 – Regexident 2011-04-07 16:09:52

+0

相反,如果提供的答案對您沒有幫助,並且人們會嘗試提供更合適的答案,那麼您應該更願意爲您的初始問題提供更多信息。一旦答案解決了你的問題,給它一個upvote並點擊綠色的複選標記來接受它。這樣具有相同問題的其他用戶可以更容易地找到經過驗證的解決方案,並且會稍後感謝您。同時它也增加了你實際獲得答案的機會;) – Regexident 2011-04-07 16:12:29

+1

是的,你是對的,對不起....我會盡力減少壓力 – CrazyDev 2011-04-07 16:16:08

回答

88

無論是通過:

NSString *immutableString = [NSString stringWithString:yourMutableString]; 

或通過:

NSString *immutableString = [[yourMutableString copy] autorelease]; 
//Note that calling [foo copy] on a mutable object of which there exists an immutable variant 
//such as NSMutableString, NSMutableArray, NSMutableDictionary from the Foundation framework 
//is expected to return an immutable copy. For a mutable copy call [foo mutableCopy] instead. 

作爲的NSString的子類,但是你可以將其轉換爲一個NSString

NSString *immutableString = yourMutableString; 

使它看上去不可變的,儘管它實際上保持不變。
許多方法實際上返回可變實例,儘管被聲明爲返回不可變的實例。

+1

好的答案!對於最後一個解決方案,您不需要進行類型轉換,因爲NSMutableString繼承自NSString,並且您始終可以將子類的類型分配給它繼承的類型,而無需編譯器投訴。 – Senseful 2013-07-17 06:41:46

+0

有效的點。不知道爲什麼我補充說。固定。 – Regexident 2013-07-17 11:10:59

+0

@Regexident你能告訴我嗎?如果他們只是簡單地返回'NSString'(實際上是'NSMutableString',那麼當用戶修改'NSString'對象時,他們不知道對象本身會被改變,所以這個工作會返回一些副作用嗎?謝謝:) – hqt 2014-08-09 04:31:55

3

NSMutableStringNSString子類,所以你可以只強制轉換它:

NSString *string = (NSString *)mutableString; 

在這種情況下,string將是mutalbeString的別名,但編譯器會抱怨,如果你試圖調用任何可變的方法在上面。

此外,您可以創建一個類的方法一個新的NSString:

NSString *string = [NSString stringWithString:mutableString]; 
+0

你能告訴我嗎?如果他們僅僅返回NSString(實際上是NSMutableString,那麼當用戶修改NSString對象時,他們不知道對象本身會被改變,對嗎?那麼這個工作會返回一些副作用嗎?謝謝:) – hqt 2014-08-09 04:32:24

+0

但是,如果潛在的可變字符串發生變化(通過mutableString變量,它實際上是否會更改不可變字符串的基礎值?如果它們都是指向同一對象的指針,它似乎會有至。 – 2018-01-08 19:14:51