iOS 中的copy
2018-12-20 本文已影响4人
lixiaoshuai
iOS 关于拷贝:
-
如何让自定义的类实现拷贝功能?
实现 <NSCopying> 协议 -(id) copyWithZone:(NSZone*)zone;
在方法中创建一个新的对象
对于自定义类调用copy方法即可拷贝一个新的对象 -
拷贝功能对私有变量的处理?
在copyWithZone: 中单独拷贝数据值 -
对需要深拷贝的值单独写一个深拷贝方法?
将需要深拷贝的集合值,在深拷贝方法中单独拷贝
深拷贝集合类的参考方法 -initWithArray: copyItem: -
具有可变版本的容器类拷贝的实现规则
immutable copy // 指针指向,不拷贝新值
immutable mutableCopy // 生成可变对象,不拷贝集合中每一个对象(内容浅拷贝)
mutable copy // 生成不可变对象,不拷贝集合中每一个对象(内容浅拷贝)
mutable mutableCopy // 指针指向,不拷贝新值 -
重写copy属性的set方法(arc)
-
setName:(NSString*)name{
_name = name;
} -
setName:(NSString*)name{
if (name == _name){ // 不建议 1. 每次均需要执行if,拖慢速度 2.给一个属性连续两次设置同样的值代码本来就不合理
_name = name;
}
}
可以在set方法进行的逻辑:
a:对参数的限制条件 例如 :(设置速度,限制速度必须在 0 -500 之间)
tips:设置readonly不能设置set方法的
- 对于copy的对象也可将 权限属性 设置为readonly