先看demo中的三张截图
图一图一声明了两个属性strongStr和copyStr,分别是strong和copy
图二图二将一个NSString类型的字符串分别赋给两个属性,打印可以看出copy和strong是没有差别的,指向相同的地址,字符串也一样
图三图三将一个NSMutableString的对象分别赋给两个属性,可以看出strong修饰的属性strongStr他指向的地址与源对象testMutalbleStr是保持一致的,并且当源对象testMutalbleStr的字符串变化时strongStr的值也发生了变化,而copy修饰的属性copyStr拷贝了testMutalbleStr的值,地址并未和testMutalbleStr一样,当testMutalbleStr的值发生变化时,copyStr的值并不会跟着变化。
总结:什么时候用copy?什么时候用strong?个人认为如果你想要你的NSString(NSArray\NSDictionary)属性随着赋值的对象变化而变化,那么你就使用strong,否则就用copy。一般情况下我们是不希望总是变化的所以一般我们都用copy修饰不可变的属性,而使用strong修饰可变的属性。
网友评论