深.浅拷贝

  • copy mutableCopy NSString

iOS 浅谈:深.浅拷贝与copy.strong-LMLPHP

  • copy mutableCopy NSMutableString

iOS 浅谈:深.浅拷贝与copy.strong-LMLPHP

结论:

iOS 浅谈:深.浅拷贝与copy.strong-LMLPHP

注意:其他对象NSArray、NSMutableArray 、NSDictionary、NSMutableDictionary一样适用

iOS 浅谈:深.浅拷贝与copy.strong-LMLPHP

  • copy NSObject

崩溃:

iOS 浅谈:深.浅拷贝与copy.strong-LMLPHP

看崩溃信息HSPerson应该先实现:

测试

iOS 浅谈:深.浅拷贝与copy.strong-LMLPHP

可以看出copyWithZone重新分配新的内存空间,则:

iOS 浅谈:深.浅拷贝与copy.strong-LMLPHP

虽然copy了份新的对象,然而age,height值并未copy,那么:

iOS 浅谈:深.浅拷贝与copy.strong-LMLPHP

这时你会想,有NSMutableCopying?没错,是有这货:

NSCopying、NSMutableCopying有啥区别?

其实感觉没必要有NSMutableCopying,因为压根就没可变的HSPerson,但如果该对象有其他行为,可以借用NSMutableCopying实现,哈哈哈

copy.strong

说完深浅拷贝,理解copy.strong就轻松多了!

  • copy

iOS 浅谈:深.浅拷贝与copy.strong-LMLPHP

property copy 实际上就对name干了这个:

假设name为NSMutableString,会发生什么事?

这样会挨骂哦,实际上内部还是:

copy出来的仍然是不可变字符!如果有人用NSMutableString的方法,就会崩溃:

iOS 浅谈:深.浅拷贝与copy.strong-LMLPHP

  • strong

iOS 浅谈:深.浅拷贝与copy.strong-LMLPHP

总结:用copy与strong取决于需求,如果不希望被外界更改用copy,反之用strong

04-25 05:25