簡體   English   中英

Objective-C指針和NSString

[英]Objective-c pointers and NSString

如果我有此代碼,為什么textview的文本不更新? 據我所知,*表示指針,而我還沒有復制。

NSString *searchText = myTextView.text;

searchText = [searchText stringByReplacingOccurrencesOfString:@" " withString:@";"];

那么為什么myTextView的文本沒有像我一樣更改:

myTextView.text = [searchText stringByReplacingOccurrencesOfString:@" " withString:@";"];

以及如何編寫代碼,以便第一個代碼示例按預期工作?

方法stringByReplacing ...不更改字符串,它返回一個新的字符串對象(根據命名約定自動釋放)。 因此,在第二行代碼之后,searchText指向完全不同的NSString對象。

此外,NSString對象無法更改,因為那里有NSMutableString

如果希望修改myTextView.text ,則必須像第二個示例一樣編寫它,並將新值分配給要修改的屬性。 將新值分配給其他變量或屬性將無法完成任務-當最終使用量子計算時,“ 遠距離的怪異動作 ”可能會起作用,但目前為止還沒有。 :-)

擴大一點:是的, searchText是一個指針。 但是myTextView.text ,當您執行“ searchText = myTextView.text ”時,您並沒有在兩者之間建立任何持久的關系-您所做的只是使searchText指向與myTextView.text相同的目標。 。 在那一點之后更改其中任何一個都不會影響另一個。 所以,當您分配的結果stringByReplacing...searchText ,你讓只有它指向一個不同的目標。

第二個示例調用“文本”屬性的設置器。

您的第一個示例使用字符串的指針,然后在相同范圍內更改指針。 因此,“文本”不變。

順便說一句:根據屬性的定義,您使用的設置器將復制,保留或分配給設置器的值。 因此,如果使用以下命令:

@property(copy) NSString* text;

然后,是的,設置器將在調用時復制您提供的值:

myTextArea.text = //some string

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM