簡體   English   中英

NSString復制不復制?

[英]NSString copy not copying?

  NSString *myString = @"sample string";
  NSString *newString = [myString copy];

如果在這兩行之后設置斷點,則myString的指針與newString的指針相同。

WTF? NSString副本不應該返回指向新對象的指針嗎? 還是我缺少有關復制應如何工作的基本知識?

由於NSString 不可變,因此可能只是在內部增加ref count並使用它來完成。

當您release其中一個NSString時,它可能只是減少ref count -標准內存管理。

您看到任何問題嗎?

考慮一下: NSMutableStringNSString的子類。 當您的屬性聲明為NSString ,您不希望其更改。

考慮一下,如果您使用了retain並且有人給了您一個NSMutableString ,然后稍后進行了更改,則您的類將被破壞。

但是,您可能會認為始終copy很慢。 因此, NSStringcopy只需retain NSMutableStringcopy構成實際副本。

通常最好吐出NSString *因為人們不必一直復制它。

您可以像示例中一樣分配新變量

NSString *anotherString = [[NSString alloc] initWithString:originalString];

最好復制一個方法返回的字符串值,因為返回的值可能是可變的字符串對象,並且在該方法返回后可以在其他線程中修改此值。

暫無
暫無

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

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