为什么NSString副本返回相同的字符串

时间:2013-03-27 03:34:07

标签: objective-c xcode4.5

po self.URL.copy
$1 = 0x1fc3ced0 http://maps.googleapis.com/maps/api/staticmap?&zoom=16&size=160x160&maptype=roadmap&sensor=true&center=-6.2032,106.7696&markers=size:small%7Ccolor:blue%7C-6.2032,106.7696
$2 = 0x1fc3ced0 http://maps.googleapis.com/maps/api/staticmap?&zoom=16&size=160x160&maptype=roadmap&sensor=true&center=-6.2032,106.7696&markers=size:small%7Ccolor:blue%7C-6.2032,106.7696
$3 = 0x1fc3ced0 http://maps.googleapis.com/maps/api/staticmap?&zoom=16&size=160x160&maptype=roadmap&sensor=true&center=-6.2032,106.7696&markers=size:small%7Ccolor:blue%7C-6.2032,106.7696
(lldb) po self.URL
$4 = 0x1fc3ced0 http://maps.googleapis.com/maps/api/staticmap?&zoom=16&size=160x160&maptype=roadmap&sensor=true&center=-6.2032,106.7696&markers=size:small%7Ccolor:blue%7C-6.2032,106.7696

我认为副本应该返回相同但位于不同地址的内容吗?

2 个答案:

答案 0 :(得分:3)

NSString是不可变的,因此没有理由实际复制它。相反,它可能只是在内部增加引用计数。查看this question了解详情。

答案 1 :(得分:3)

如果字符串是不可变的,那么copy实际上只是retain。由于字符串的内容永远不会改变,因此不需要复制字符串的数据。