最近给一些朋友讲了一些较基础的知识点,顺手做个笔记,知识点倒不是什么新鲜偏门的,主要想锻炼一下表达能力,将自己理解的东西清晰的讲出来并让人理解,是一种重要能力。
为什么,NSString用copy, 不用Strong?
结论:
1,一般我们不希望string随着别的字符串改变而改变
2,copy深复制(创建了一个新对象), 防止将可变字符串赋值给string后,string随可变字符串变化而改变。用strong修饰string,string会随mutableString改变。对于把NSString类型的字符串str2赋值给str,copy和strong没区别,str都不会随str2改变,因为str2本身就是不可变字符串。
原因:
NSString *str变量,把NSMutableString *mStr变量的赋值给它了,
如果要求str跟着mStr变化,那么就用strong;如果str不能跟着mStr变化,那就用copy。
而
个人理解:self.str自己的指针A,mutableString的指针B指向对象b, self.str = mStr; 这个操作: 如果self.str是copy修饰,那么指针A会指向a (a是copy的b,是一个新对象); 如果self.str是strong修饰,那么指针A会指向b, 也就是和mutableString的指针B指向同一个对象b.