NSString到底是用copy还是strong?

2017-06-22  本文已影响0人  火星抄手

本质上来讲,copy和strong都没有错,但不是说,NSString用copy就一定是最好的。

那么,什么时候用copy,什么时候用strong呢?

copy修饰的NSString,在初始化时,如果来源是NSMutableString的话,会对来源进行一次深拷贝,将来源的内存地址复制一份,这样,两个对象就一点关系就没有了,无论你怎么操作来源,都不会对自己的NSString有任何影响
比如:
你有一个@property(nonatomic,copy) NSString *str
然后有一个NSMutableString *sourceStr
当你进行str = sourceStr操作之后,紧接着你又改变了sourceStr的内容sourceStr = @"change";那么str的内容并不会改变。 如果你的str不是copy修饰的,而是strong修饰的,那么str的值也会变成@"change";因为strong是浅拷贝的,并不会对来源的内存地址进行拷贝
那么问题来了,既然copy安全,那为什么不都用copy?
这里我们需要了解一点,copy修饰的NSString在进行set操作时,底层是这样实现的:
我们还是举上面那个例子,进行str = sourceStr操作时,内部会执行一个操作:
str = [sourceStr copy]

附:

一、mutableCopy和copy的理解
二、NSCopying和NSMutableCopying协议

上一篇下一篇

猜你喜欢

热点阅读