2011-09-17 71 views
0

我是Objective-C的新手,需要指針概念的幫助。我寫這個代碼:瞭解數組指針

//myArray is of type NSMutableArray 
NSString *objectFromArray = [myArray objectAtIndex:2]; 
[objectFromArray uppercaseString]; 

我認爲這將改變在myarray的字符串[2],因爲我得到實際的指針。不應該對解除引用的指針進行任何更改,這意味着該位置中的對象會發生變化?或者這與'string immutability'有關?無論哪種方式,當我使用NSLog並迭代myArray時,所有的字符串仍然是小寫字母。

+2

奧列給你你需要的答案。但是,對於一個新來ObjC的人來說,我發現一些額外的指導意見並不支付將指針指向ObjC對象的指針*本身。把它們想象成可以用objc括號符號,點符號等「消息」的「對象」。如果你試圖對它們進行任何指針操作(比如明確的解引用,指針算術等等),它幾乎總是錯誤的方式往往會發生壞事。 – jemmons

+0

感謝您的提示。我之前對指針有一個非常基本的想法,但在學習ObjC之後,我覺得我已經忘記了一切:D – XSL

+0

老實說,這可能是最好的;-) – jemmons

回答

2

不應該對解除引用的指針進行任何更改,這意味着該位置中的對象會發生更改?

是的,他們會的。但是,如果您閱讀uppercaseString的文檔,您會發現它不會修改字符串。相反,它會返回原始字符串的新大寫版本。 NSString上的所有方法都是這樣工作的。

您需要一個NSMutableString的實例才能夠修改其內容。但NSMutableString沒有相應的大寫方法,因此您必須自己編寫它(作爲NSMutableString上的類別)。

+0

感謝您的解釋。 – XSL

-1

當然!!數組中的字符串不會被轉換爲大寫字母[objectFromArray uppercaseString];會返回大寫的字符串,但並未收集到任何對象中。 「uppercaseString」不會修改所謂的字符串對象本身... !!