更新问题 “如何让自己的类用 copy 修饰符?如何重写带 copy 关键字的 setter?” 的答案 #24
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
文中的
- deepCopy
方法并不能实现深拷贝。CYLUser
的- copyWithZone
方法里,_friends
成员的的赋值使用的- mutableCopy
是浅拷贝,只是创建了NSMutableSet
对象;导致- deepCopy
方法中, _friends 的每一个对象的 _friends 列表并未创建实例。为了测试
NSArray
,NSSet
容器类初始化行为,我写了测试代码,执行结果:
关于 如何重写带 copy 关键字的 setter
首先,if 的确比对象 copy 要快。
另外,判断对象是否相同是为了保证代码执行的正确性。在非 ARC 环境下,如果穿入对象 retain count 为 1,不做判断的话,release 之后对象内存释放,下一步 copy 也会出错。