[英]NSString copy not copying?
NSString *myString = @"sample string";
NSString *newString = [myString copy];
如果在這兩行之后設置斷點,則myString的指針與newString的指針相同。
WTF? NSString副本不應該返回指向新對象的指針嗎? 還是我缺少有關復制應如何工作的基本知識?
由於NSString
不可變,因此可能只是在內部增加ref count
並使用它來完成。
當您release
其中一個NSString時,它可能只是減少ref count
-標准內存管理。
您看到任何問題嗎?
考慮一下: NSMutableString
是NSString
的子類。 當您的屬性聲明為NSString
,您不希望其更改。
考慮一下,如果您使用了retain
並且有人給了您一個NSMutableString
,然后稍后進行了更改,則您的類將被破壞。
但是,您可能會認為始終copy
很慢。 因此, NSString
的copy
只需retain
。 NSMutableString
的copy
構成實際副本。
通常最好吐出NSString *
因為人們不必一直復制它。
您可以像示例中一樣分配新變量
NSString *anotherString = [[NSString alloc] initWithString:originalString];
最好復制一個方法返回的字符串值,因為返回的值可能是可變的字符串對象,並且在該方法返回后可以在其他線程中修改此值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.