一直想写点东西,来记录自己平时开发、阅读博客、看书、代码分析中遇到的各种问题。之前有过这样的尝试,但都是无疾而终。不过,每天接触的东西多,有些东西不记下来,忘得也是很快,第二次遇到同样的问题时,还得再查一遍。好记性不如烂笔头,所以又决定重拾此事,时不时回头看看,温故而知新。
本期主要记录属性的修饰词用法,在平常的开发过程中,我们很少去关注,这个时候为什么会用这个修饰词,大部分都会觉得“就该用这个”,然而面试的时候却讲不清楚。
1.NSString的修饰词copy,strong
创建一个string@“abc”,分别把它赋值给copy修饰的copyString和strong修饰的strongString,打印他们的地址---是同一个地址。
但是把string变成可变mutString的时候,strongString的地址跟mutString相同,copyString的地址则不同。
这里还有一个性能问题,即在源字符串是NSMutableString,strong是单纯的增加对象的引用计数,而copy操作是执行了一次深拷贝,所以性能上会有所差异。而如果源字符串是NSString时,则没有这个问题。
所以,在声明NSString属性时,到底是选择strong还是copy,可以根据实际情况来定。不过,一般我们将对象声明为NSString时,都不希望它改变,所以大多数情况下,我们建议用copy,以免因可变字符串的修改导致的一些非预期问题。