我理解的NSString的copy和strong

2019-03-15  本文已影响0人  天空之城_bdfa

一、不可变字符串

注:①、常量字符串存储在常量存储区,如果内容相同,都会指向同一块常量存储区相同的一个区域,而不是开辟出一个额外的内存空间;

②、initWithStrong:生成的字符串也相当于常量;

③、非常量字符串(如initWithFormat:)在堆区,一般会指向不同的一个区域(发现如果是相同的简单非汉字字符串,长度不超过9个字节时,竟然是指向同一块区域)。

1、copy相当于strong;

2、其实跟其他对象类型,都是指针拷贝,都会指向同一个内容;

3、由于不可变字符串的特殊性,想改变不可变字符串对象的内容,就需要重新赋值,自然这个被重新赋值的对象所指向的内容就改变了。

(听说不可变字符串的copy在编译时,会转为strong,直接使用strong性能会更好)

二、可变字符串

其实跟其他对象类型一样,copy会拷贝内容生成新的指针,strong拷贝指针指向同一内容。

结论:字符串使用copy,是为防止在持有的可变字符串改变时,导致该对象内容同时改变。

上一篇下一篇

猜你喜欢

热点阅读