实现拷贝的方法
- copy
- 只会产生不可变的副本对象(比如NSString)
- mutableCopy
- 只会产生可变的副本对象(比如NSMutableString)
- 只会产生可变的副本对象(比如NSMutableString)
自定义对象的拷贝
自定义对象要实现拷贝操作需要
1.遵守
NSCopying
协议@interface XMGPerson() <NSCopying> @end
- 2.内部实现
- (id)copyWithZone:(NSZone *)zone
方法
- (id)copyWithZone:(NSZone *)zone { Person *person = [[Person allocWithZone:zone] init]; person.age = self.age; person.money = self.money; return person; }
- 2.内部实现
属性property
中copy描述
- 1.
@property (nonatomic, copy) NSString *name;
//本质上实现的set方法为
- (void)setName:(NSString *)name
{
_name = [name copy];
}
如@property (nonatomic, strong)NSString *name;
//本质上实现的set方法为
- (void)setName:(NSString *)name
{
_name = name; //直接赋值
}
- 2.当 @property (nonatomic, copy) NSMutableString *name;这里用
copy
描述不合适,因为copy
描述时name属性值永远是不可变,若外部文件使用name属性时,可能调用NSMutableString的方法,程序会出错,所以这里定义为NSMutableString是不合理的。